+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 */
+typedef long loc_t; // index into the locations array */
+typedef long turn_t; // turn counter or threshold */
+
+struct game_t {
+ int32_t lcg_x;
+ long abbnum; // How often to print long descriptions
+ score_t bonus; // What kind of finishing bonus we are getting
+ 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
+ bool lmwarn; // has player been warned about lamp going dim?
+ bool novice; // asked for instructions at start-up?
+ bool panic; // has player found out he's trapped?
+ bool wzdark; // whether the loc he's leaving was dark
+ bool blooded; // has player drunk of dragon's blood?
+ long conds; // min value for cond[loc] if loc has any hints
+ long detail; // level of detail in descriptions
+
+ /* dflag controls the level of activation of dwarves:
+ * 0 No dwarf stuff yet (wait until reaches Hall Of Mists)
+ * 1 Reached Hall Of Mists, but hasn't met first dwarf
+ * 2 Met first dwarf, others start moving, no knives thrown yet
+ * 3 A knife has been thrown (first set always misses)
+ * 3+ Dwarves are mad (increases their accuracy) */
+ long dflag;
+
+ long dkill; // dwarves killed
+ long dtotal; // total dwarves (including pirate) in loc
+ long foobar; // progress in saying "FEE FIE FOE FOO".
+ long holdng; // number of objects being carried
+ 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
+ turn_t limit; // lifetime of lamp
+ loc_t loc; // where player is now
+ loc_t newloc; // where player is going
+ 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
+ long saved; // point penalty for saves
+ long tally; // count of treasures gained
+ long thresh; // current threshold for endgame scoring tier
+ turn_t trndex; // FIXME: not used, remove on next format bump
+ 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
+ long abbrev[NLOCATIONS + 1]; // has location been seen?
+ long atloc[NLOCATIONS + 1]; // head of object linked list per location
+ long dseen[NDWARVES + 1]; // true if dwarf has seen him
+ loc_t dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in
+ loc_t odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage
+ loc_t fixed[NOBJECTS + 1]; // fixed location of object (if not IS_FREE)
+ obj_t link[NOBJECTS * 2 + 1]; // object-list links
+ loc_t place[NOBJECTS + 1]; // location of object
+ long hinted[NHINTS]; // hinted[i] = true iff hint i has been used.
+ long hintlc[NHINTS]; // hintlc[i] = how long at LOC with cond bit i
+ long prop[NOBJECTS + 1]; // object state array */
+};
+
+/*
+ * Game application settings - settings, but not state of the game, per se.
+ * This data is not saved in a saved game.
+ */
+struct settings_t {
+ FILE *logfp;
+ bool oldstyle;
+ bool prompt;
+};
+
+typedef struct {
+ char raw[LINESIZE];
+ vocab_t id;
+ word_type_t type;
+} command_word_t;
+
+typedef enum {EMPTY, RAW, TOKENIZED, GIVEN, PREPROCESSED, PROCESSING, EXECUTED} command_state_t;