X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=advent.h;h=34f44157eb575251d93821857c671ef713680a86;hp=cca1dbab1d328e310643fc1f389639d03444f0c4;hb=73608b6307938818e32c57ae2eb536e19b10480e;hpb=294f2b8a6d0afeb1d209f5cd7baa6509710f0bc0 diff --git a/advent.h b/advent.h index cca1dba..34f4415 100644 --- a/advent.h +++ b/advent.h @@ -27,7 +27,17 @@ /* Special object-state values - integers > 0 are object-specific */ #define STATE_NOTFOUND -1 // 'Not found" state of treasures */ -#define STATE_GROUND 0 // After discovered, before messed with +#define STATE_FOUND 0 // After discovered, before messed with +#define STATE_IN_CAVITY 1 // State value common to all gemstones + +/* Special fixed object-state values - integers > 0 are location */ +#define IS_FIXED -1 +#define IS_FREE 0 + +/* 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. */ +#define STASHED(obj) (-1 - game.prop[obj]) /* * MOD(N,M) = Arithmetic modulus @@ -106,6 +116,8 @@ enum phase_codes { typedef long token_t; // word token - someday this will be char[TOKLEN+1] typedef long vocab_t; // index into a vocabulary array */ +typedef long obj_t; // index into the object array */ +typedef long loc_t; // index into the locations array */ struct game_t { unsigned long lcg_a, lcg_c, lcg_m, lcg_x; @@ -157,11 +169,11 @@ struct game_t { long abbrev[NLOCATIONS + 1]; long atloc[NLOCATIONS + 1]; long dseen[NDWARVES + 1]; // true if dwarf has seen him - long dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in - long odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage - long fixed[NOBJECTS + 1]; + 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]; long link[NOBJECTS * 2 + 1]; - long place[NOBJECTS + 1]; + loc_t place[NOBJECTS + 1]; long hinted[NHINTS]; // hintlc[i] is how long he's been at LOC with cond bit i long hintlc[NHINTS]; // hinted[i] is true iff hint i has been used. long prop[NOBJECTS + 1]; @@ -185,7 +197,7 @@ struct command_t { token_t wd2; long id1; long id2; - char raw1[BUFSIZ], raw2[BUFSIZ]; + char raw1[LINESIZE], raw2[LINESIZE]; }; extern struct game_t game; @@ -212,12 +224,12 @@ extern int get_object_vocab_id(const char*); extern int get_action_vocab_id(const char*); extern int get_special_vocab_id(const char*); extern long get_vocab_id(const char*); -extern void juggle(long); -extern void move(long, long); -extern long put(long, long, long); -extern void carry(long, long); -extern void drop(long, long); -extern long atdwrf(long); +extern void juggle(obj_t); +extern void move(obj_t, loc_t); +extern long 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 bool tstbit(long, int); extern void make_zzword(char*); @@ -232,6 +244,8 @@ 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); + void bug(enum bugtype, const char *) __attribute__((__noreturn__));