Massage "{oil|water} {plant|door} into equivalent pourcommand.
[open-adventure.git] / advent.h
index 80f9eaaea590670ff8066331f0503aa844023475..f5fe672039d37ac9d76be6c94c4dfcbc59cac640 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -87,7 +87,7 @@ enum termination {endgame, quitgame, scoregame};
 
 enum speechpart {unknown, intransitive, transitive};
 
-enum wordtype {NO_WORD_TYPE, MOTION, OBJECT, ACTION, SPECIAL};
+typedef enum {NO_WORD_TYPE, MOTION, OBJECT, ACTION, NUMERIC} word_type_t;
 
 typedef enum scorebonus {none, splatter, defeat, victory} score_t;
 
@@ -101,15 +101,11 @@ enum phase_codes {
     GO_TOP,
     GO_CLEAROBJ,
     GO_CHECKHINT,
-    GO_DIRECTION,
     GO_WORD2,
-    GO_SPECIALS,
     GO_UNKNOWN,
-    GO_ACTION,
     GO_DWARFWAKE,
 };
 
-typedef long token_t;  // token index */
 typedef long vocab_t;  // index into a vocabulary array */
 typedef long verb_t;   // index into an actions array */
 typedef long obj_t;    // index into the object array */
@@ -120,10 +116,10 @@ struct game_t {
     unsigned long lcg_a, lcg_c, lcg_m, lcg_x;
     long abbnum;                 // How often to print long descriptions
     score_t bonus;               // What kind of finishing bonus we are getting
-    long chloc;                  // pirate chest location
-    long chloc2;                 // pirate chest alternate location
-    long clock1;                 // # turns from finding last treasure to close
-    long clock2;                 // # turns from warning till blinding flash
+    loc_t chloc;                 // pirate chest location
+    loc_t chloc2;                // pirate chest alternate location
+    turn_t clock1;               // # turns from finding last treasure to close
+    turn_t clock2;               // # turns from warning till blinding flash
     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
@@ -145,12 +141,12 @@ struct game_t {
     long igo;                    // # uses of "go" instead of a direction
     long iwest;                  // # times he's said "west" instead of "w"
     long knfloc;                 // knife location; 0 if none, -1 after caveat
-    long limit;                  // lifetime of lamp (not set here)
+    turn_t limit;                // lifetime of lamp
     bool lmwarn;                 // has player been warned about lamp going dim?
     loc_t loc;                   // where player is now
     loc_t newloc;                // where player is going
     bool novice;                 // asked for instructions at start-up?
-    long numdie;                 // number of times killed so far
+    turn_t numdie;               // number of times killed so far
     loc_t oldloc;                // where player was
     loc_t oldlc2;                // where player was two moves ago 
     obj_t oldobj;                // last object player handled
@@ -187,22 +183,23 @@ struct settings_t {
     bool prompt;
 };
 
-struct command_t {
+typedef struct {
+  char raw[LINESIZE];
+  vocab_t id;
+  word_type_t type;
+} command_word_t;
+
+typedef struct {
     enum speechpart part;
+    command_word_t word[2];
     verb_t verb;
     obj_t   obj;
-    token_t id1;
-    token_t id2;
-    char raw1[LINESIZE], raw2[LINESIZE];
-    enum wordtype type1;
-    enum wordtype type2;
-};
+} command_t;
 
 extern struct game_t game;
 extern struct settings_t settings;
 
-extern bool get_command_input(struct command_t *);
-extern void wordclear(token_t *);
+extern bool get_command_input(command_t *);
 extern void speak(const char*, ...);
 extern void sspeak(int msg, ...);
 extern void pspeak(vocab_t, enum speaktype, int, bool, ...);
@@ -215,12 +212,10 @@ extern void move(obj_t, loc_t);
 extern loc_t put(obj_t, long, long);
 extern void carry(obj_t, loc_t);
 extern void drop(obj_t, loc_t);
-extern long atdwrf(loc_t);
-extern long setbit(long);
+extern int atdwrf(loc_t);
+extern long setbit(int);
 extern bool tstbit(long, int);
-extern void make_zzword(char*);
 extern void set_seed(long);
-extern unsigned long get_next_lcg_value(void);
 extern long randrange(long);
 extern long score(enum termination);
 extern void terminate(enum termination) __attribute__((noreturn));
@@ -229,10 +224,17 @@ extern int suspend(void);
 extern int resume(void);
 extern int restore(FILE *);
 extern long initialise(void);
-extern int action(struct command_t *command);
-extern void state_change(obj_t, long);
+extern int action(command_t command);
+extern void state_change(obj_t, int);
 
 
 void bug(enum bugtype, const char *) __attribute__((__noreturn__));
 
+/* represent an empty command word */
+static const command_word_t empty_command_word = {
+  .raw = "",
+  .id = WORD_EMPTY,
+  .type = NO_WORD_TYPE,
+};
+
 /* end */