More use of manifest constants.

This commit is contained in:
Eric S. Raymond 2017-06-15 10:59:43 -04:00
parent 1896e0f886
commit 0dc78b4221
3 changed files with 37 additions and 22 deletions

View file

@ -78,12 +78,18 @@ static int attack(FILE *input, long verb, token_t obj)
game.dseen[i]=false; game.dseen[i]=false;
} }
} }
spk=spk+1+1/k; spk=spk+1+1/k; /* FIXME: Arithmetic on message numbers */
RSPEAK(spk);
return GO_CLEAROBJ;
}
if (obj == BEAR)
/* FIXME: Arithmetic on message numbers */
spk = BEAR_HANDS+(game.prop[BEAR]+1)/2;
if (obj != DRAGON || game.prop[DRAGON] != 0) {
RSPEAK(spk); RSPEAK(spk);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
if (obj == BEAR)spk=BEAR_HANDS+(game.prop[BEAR]+1)/2;
if (obj != DRAGON || game.prop[DRAGON] != 0) {RSPEAK(spk); return GO_CLEAROBJ;}
/* Fun stuff for dragon. If he insists on attacking it, win! /* Fun stuff for dragon. If he insists on attacking it, win!
* Set game.prop to dead, move dragon to central loc (still * Set game.prop to dead, move dragon to central loc (still
* fixed), move rug there (not fixed), and move him there, * fixed), move rug there (not fixed), and move him there,
@ -306,7 +312,10 @@ static int chain(token_t verb)
spk=CHAIN_LOCKED; spk=CHAIN_LOCKED;
if (game.prop[CHAIN] != 0)spk=ALREADY_LOCKED; if (game.prop[CHAIN] != 0)spk=ALREADY_LOCKED;
if (game.loc != PLAC[CHAIN])spk=NO_LOCKSITE; if (game.loc != PLAC[CHAIN])spk=NO_LOCKSITE;
if (spk != CHAIN_LOCKED) {RSPEAK(spk); return GO_CLEAROBJ;} if (spk != CHAIN_LOCKED) {
RSPEAK(spk);
return GO_CLEAROBJ;
}
game.prop[CHAIN]=2; game.prop[CHAIN]=2;
if (TOTING(CHAIN))DROP(CHAIN,game.loc); if (TOTING(CHAIN))DROP(CHAIN,game.loc);
game.fixed[CHAIN]= -1; game.fixed[CHAIN]= -1;
@ -396,7 +405,7 @@ static int drink(token_t verb, token_t obj)
return GO_UNKNOWN; return GO_UNKNOWN;
if (obj != BLOOD) { if (obj != BLOOD) {
if (obj != 0 && obj != WATER)spk=RIDICULOUS_ATTEMPT; if (obj != 0 && obj != WATER)spk=RIDICULOUS_ATTEMPT;
if (spk != 110 && LIQUID() == WATER && HERE(BOTTLE)) { if (spk != RIDICULOUS_ATTEMPT && LIQUID() == WATER && HERE(BOTTLE)) {
game.prop[BOTTLE]=1; game.prop[BOTTLE]=1;
game.place[WATER]=0; game.place[WATER]=0;
spk=BOTTLE_EMPTY; spk=BOTTLE_EMPTY;
@ -600,7 +609,8 @@ static int fly(token_t verb, token_t obj)
game.oldloc=game.loc; game.oldloc=game.loc;
game.newloc=game.place[RUG]+game.fixed[RUG]-game.loc; game.newloc=game.place[RUG]+game.fixed[RUG]-game.loc;
spk=RUG_GOES; spk=RUG_GOES;
if (game.prop[SAPPH] >= 0)spk=RUG_RETURNS; if (game.prop[SAPPH] >= 0)
spk=RUG_RETURNS;
RSPEAK(spk); RSPEAK(spk);
return GO_TERMINATE; return GO_TERMINATE;
} }
@ -811,13 +821,16 @@ static int reservoir(void)
} else { } else {
PSPEAK(RESER,game.prop[RESER]+1); PSPEAK(RESER,game.prop[RESER]+1);
game.prop[RESER]=1-game.prop[RESER]; game.prop[RESER]=1-game.prop[RESER];
if (AT(RESER)) return GO_CLEAROBJ; if (AT(RESER))
return GO_CLEAROBJ;
else {
game.oldlc2=game.loc; game.oldlc2=game.loc;
game.newloc=0; game.newloc=0;
RSPEAK(NOT_BRIGHT); RSPEAK(NOT_BRIGHT);
return GO_TERMINATE; return GO_TERMINATE;
} }
} }
}
static int rub(token_t verb, token_t obj) static int rub(token_t verb, token_t obj)
/* Rub. Yields various snide remarks except for lit urn. */ /* Rub. Yields various snide remarks except for lit urn. */
@ -875,7 +888,7 @@ static int throw(FILE *cmdin, long verb, token_t obj)
RSPEAK(spk); RSPEAK(spk);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
if (obj >= 50 && obj <= MAXTRS && AT(TROLL)) { if (obj >= MINTRS && obj <= MAXTRS && AT(TROLL)) {
spk=TROLL_SATISFIED; spk=TROLL_SATISFIED;
/* Snarf a treasure for the troll. */ /* Snarf a treasure for the troll. */
DROP(obj,0); DROP(obj,0);

View file

@ -6,7 +6,7 @@
#define LINESIZE 100 #define LINESIZE 100
#define NDWARVES 6 #define NDWARVES 6
#define PIRATE NDWARVES /* must be NDWARVES-1 when zero-origin */ #define PIRATE NDWARVES /* must be NDWARVES-1 when zero-origin */
#define DALTLC 18 /* alternate dwarf location; low room */ #define DALTLC LOC_NUGGET /* alternate dwarf location */
#define MINTRS 50 #define MINTRS 50
#define MAXTRS 79 #define MAXTRS 79
#define MAXPARMS 25 #define MAXPARMS 25
@ -140,7 +140,7 @@ extern int saveresume(FILE *, bool);
#define DARK(DUMMY) ((!CNDBIT(game.loc,LIGHT)) && (game.prop[LAMP] == 0 || !HERE(LAMP))) #define DARK(DUMMY) ((!CNDBIT(game.loc,LIGHT)) && (game.prop[LAMP] == 0 || !HERE(LAMP)))
#define PCT(N) (randrange(100) < (N)) #define PCT(N) (randrange(100) < (N))
#define GSTONE(OBJ) ((OBJ) == EMRALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH) #define GSTONE(OBJ) ((OBJ) == EMRALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH)
#define FOREST(LOC) ((LOC) >= 145 && (LOC) <= 166) #define FOREST(LOC) ((LOC) >= LOC_FOREST1 && (LOC) <= LOC_FOREST22)
#define VOCWRD(LETTRS,SECT) (VOCAB(MAKEWD(LETTRS),SECT)) #define VOCWRD(LETTRS,SECT) (VOCAB(MAKEWD(LETTRS),SECT))
#define SPECIAL(LOC) ((LOC) > SPECIALBASE) #define SPECIAL(LOC) ((LOC) > SPECIALBASE)
@ -150,8 +150,8 @@ extern int saveresume(FILE *, bool);
* LOC is outside, INDEEP(LOC) is true if LOC is "deep" in the cave (hall * LOC is outside, INDEEP(LOC) is true if LOC is "deep" in the cave (hall
* of mists or deeper). Note special kludges for "Foof!" locs. */ * of mists or deeper). Note special kludges for "Foof!" locs. */
#define OUTSID(LOC) ((LOC) <= 8 || FOREST(LOC) || (LOC) == PLAC[SAPPH] || (LOC) == 180 || (LOC) == 182) #define OUTSID(LOC) ((LOC) <= LOC_GRATE || FOREST(LOC) || (LOC) == PLAC[SAPPH] || (LOC) == LOC_FOOF2 || (LOC) == LOC_FOOF4)
#define INDEEP(LOC) ((LOC) >= 15 && !OUTSID(LOC) && (LOC) != 179) #define INDEEP(LOC) ((LOC) >= LOC_MISTHALL && !OUTSID(LOC) && (LOC) != LOC_FOOF1)
/* vocabulary items */ /* vocabulary items */
extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR,

8
main.c
View file

@ -490,7 +490,7 @@ static void croak(FILE *cmdin)
int i=NOBJECTS + 1 - j; int i=NOBJECTS + 1 - j;
if (TOTING(i)) { if (TOTING(i)) {
/* Always leave lamp where it's accessible aboveground */ /* Always leave lamp where it's accessible aboveground */
DROP(i, (i == LAMP) ? 1 : game.oldlc2); DROP(i, (i == LAMP) ? LOC_START : game.oldlc2);
} }
} }
game.loc = LOC_BUILDING; game.loc = LOC_BUILDING;
@ -558,7 +558,8 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
/* Look. Can't give more detail. Pretend it wasn't dark /* Look. Can't give more detail. Pretend it wasn't dark
* (though it may "now" be dark) so he won't fall into a * (though it may "now" be dark) so he won't fall into a
* pit while staring into the gloom. */ * pit while staring into the gloom. */
if (game.detail < 3)RSPEAK(NO_MORE_DETAIL); if (game.detail < 3)
RSPEAK(NO_MORE_DETAIL);
++game.detail; ++game.detail;
game.wzdark=false; game.wzdark=false;
game.abbrev[game.loc]=0; game.abbrev[game.loc]=0;
@ -640,6 +641,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
* emerald. Note: travel table must include "useless" * emerald. Note: travel table must include "useless"
* entries going through passage, which can never be used for * entries going through passage, which can never be used for
* actual motion, but can be spotted by "go back". */ * actual motion, but can be spotted by "go back". */
/* FIXME: Arithmetic on location numbers */
game.newloc=99+100-game.loc; game.newloc=99+100-game.loc;
if (game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD))) if (game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD)))
return true; return true;
@ -950,7 +952,7 @@ static bool do_command(FILE *cmdin)
croak(cmdin); croak(cmdin);
continue; /* back to top of main interpreter loop */ continue; /* back to top of main interpreter loop */
} }
msg=arbitrary_messages[16]; msg=arbitrary_messages[PITCH_DARK];
} }
if (TOTING(BEAR))RSPEAK(TAME_BEAR); if (TOTING(BEAR))RSPEAK(TAME_BEAR);
newspeak(msg); newspeak(msg);