/* Fun stuff for dragon. If he insists on attacking it, win!
* Set game.prop to dead, move dragon to central loc (still
* fixed), move rug there (not fixed), and move him there,
/* Fun stuff for dragon. If he insists on attacking it, win!
* Set game.prop to dead, move dragon to central loc (still
* fixed), move rug there (not fixed), and move him there,
/* Bring back troll if we steal the eggs back from him before
* crossing. */
if (game.place[EGGS]==0 && game.place[TROLL]==0 && game.prop[TROLL]==0)
/* Bring back troll if we steal the eggs back from him before
* crossing. */
if (game.place[EGGS]==0 && game.place[TROLL]==0 && game.prop[TROLL]==0)
if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1)
return(fill(BOTTLE));
if (game.prop[BOTTLE] != 1)SPK=105;
if (!TOTING(BOTTLE))SPK=104;
if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1)
return(fill(BOTTLE));
if (game.prop[BOTTLE] != 1)SPK=105;
if (!TOTING(BOTTLE))SPK=104;
- if (game.holdng >= INVLIMIT)
- return(2011);
- if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
+ if (game.holdng >= INVLIMIT) {
+ RSPEAK(SPK);
+ return 2012;
+ }
+ else if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
game.prop[BIRD]=1;
}
if ((obj==BIRD || obj==CAGE) && (game.prop[BIRD]==1 || -1-game.prop[BIRD]==1))
CARRY(BIRD+CAGE-obj,game.loc);
CARRY(obj,game.loc);
game.prop[BIRD]=1;
}
if ((obj==BIRD || obj==CAGE) && (game.prop[BIRD]==1 || -1-game.prop[BIRD]==1))
CARRY(BIRD+CAGE-obj,game.loc);
CARRY(obj,game.loc);
- if (obj == BOTTLE && LIQ(0) != 0)
- game.place[LIQ(0)] = -1;
- if (!GSTONE(obj) || game.prop[obj] == 0)
- return(2009);
- game.prop[obj]=0;
- game.prop[CAVITY]=1;
- return(2009);
+ if (obj == BOTTLE && LIQUID() != 0)
+ game.place[LIQUID()] = -1;
+ if (GSTONE(obj) && game.prop[obj] != 0) {
+ game.prop[obj]=0;
+ game.prop[CAVITY]=1;
+ }
+ RSPEAK(54);
+ return(2012);
if (K == obj)obj=BOTTLE;
if (obj == BOTTLE && K != 0)game.place[K]=0;
if (obj == CAGE && game.prop[BIRD] == 1)DROP(BIRD,game.loc);
if (K == obj)obj=BOTTLE;
if (obj == BOTTLE && K != 0)game.place[K]=0;
if (obj == CAGE && game.prop[BIRD] == 1)DROP(BIRD,game.loc);
/* Drink. If no object, assume water and look for it here. If water is in
* the bottle, drink that, else must be at a water loc, so drink stream. */
{
/* Drink. If no object, assume water and look for it here. If water is in
* the bottle, drink that, else must be at a water loc, so drink stream. */
{
}
if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj ==
DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj ==
OGRE)SPK=71;
}
if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj ==
DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj ==
OGRE)SPK=71;
if (obj == INTRANSITIVE) {
if (HERE(LAMP) && game.prop[LAMP] == 1)obj=LAMP;
if (HERE(URN) && game.prop[URN] == 2)obj=obj*NOBJECTS+URN;
if (obj == INTRANSITIVE) {
if (HERE(LAMP) && game.prop[LAMP] == 1)obj=LAMP;
if (HERE(URN) && game.prop[URN] == 2)obj=obj*NOBJECTS+URN;
if (obj == DRAGON && game.prop[DRAGON] != 0)SPK=110;
if (obj == TROLL)SPK=182;
if (obj != SNAKE || game.closed || !HERE(BIRD))
if (obj == DRAGON && game.prop[DRAGON] != 0)SPK=110;
if (obj == TROLL)SPK=182;
if (obj != SNAKE || game.closed || !HERE(BIRD))
}
static int find(token_t obj)
/* Find. Might be carrying it, or it might be here. Else give caveat. */
{
if (AT(obj) ||
}
static int find(token_t obj)
/* Find. Might be carrying it, or it might be here. Else give caveat. */
{
if (AT(obj) ||
if (obj == INTRANSITIVE) {
if (HERE(LAMP) && game.prop[LAMP] == 0 && game.limit >= 0)obj=LAMP;
if (HERE(URN) && game.prop[URN] == 1)obj=obj*NOBJECTS+URN;
if (obj == INTRANSITIVE) {
if (HERE(LAMP) && game.prop[LAMP] == 0 && game.limit >= 0)obj=LAMP;
if (HERE(URN) && game.prop[URN] == 1)obj=obj*NOBJECTS+URN;
}
static int pour(token_t obj)
/* Pour. If no object, or object is bottle, assume contents of bottle.
* special tests for pouring water or oil on plant or rusty door. */
{
}
static int pour(token_t obj)
/* Pour. If no object, or object is bottle, assume contents of bottle.
* special tests for pouring water or oil on plant or rusty door. */
{
PSPEAK(PLANT,game.prop[PLANT]+3);
game.prop[PLANT]=MOD(game.prop[PLANT]+1,3);
game.prop[PLANT2]=game.prop[PLANT];
PSPEAK(PLANT,game.prop[PLANT]+3);
game.prop[PLANT]=MOD(game.prop[PLANT]+1,3);
game.prop[PLANT2]=game.prop[PLANT];
if (obj == OYSTER && !game.clshnt) {
game.clshnt=YES(input,192,193,54);
return(2012);
if (obj == OYSTER && !game.clshnt) {
game.clshnt=YES(input,192,193,54);
return(2012);
PSPEAK(RESER,game.prop[RESER]+1);
game.prop[RESER]=1-game.prop[RESER];
if (AT(RESER)) return(2012);
PSPEAK(RESER,game.prop[RESER]+1);
game.prop[RESER]=1-game.prop[RESER];
if (AT(RESER)) return(2012);
DROP(TROLL2,PLAC[TROLL]);
DROP(TROLL2+NOBJECTS,FIXD[TROLL]);
JUGGLE(CHASM);
DROP(TROLL2,PLAC[TROLL]);
DROP(TROLL2+NOBJECTS,FIXD[TROLL]);
JUGGLE(CHASM);
if (HERE(BIRD))SPK=206+MOD(game.prop[BIRD],2);
if (SPK == 206 && game.loc == game.place[STEPS] && game.prop[JADE] < 0) {
DROP(JADE,game.loc);
game.prop[JADE]=0;
--game.tally;
SPK=208;
if (HERE(BIRD))SPK=206+MOD(game.prop[BIRD],2);
if (SPK == 206 && game.loc == game.place[STEPS] && game.prop[JADE] < 0) {
DROP(JADE,game.loc);
game.prop[JADE]=0;
--game.tally;
SPK=208;
if (HERE(BIRD))RSPEAK(SPK);
game.prop[FISSUR]=1-game.prop[FISSUR];
PSPEAK(FISSUR,2-game.prop[FISSUR]);
if (HERE(BIRD))RSPEAK(SPK);
game.prop[FISSUR]=1-game.prop[FISSUR];
PSPEAK(FISSUR,2-game.prop[FISSUR]);
case 1: /* DROP */ return(8000);
case 2: /* SAY */ return(8000);
case 3: /* UNLOC */ return lock(verb, INTRANSITIVE);
case 1: /* DROP */ return(8000);
case 2: /* SAY */ return(8000);
case 3: /* UNLOC */ return lock(verb, INTRANSITIVE);
case 5: /* LOCK */ return lock(verb, INTRANSITIVE);
case 6: /* LIGHT */ return light(INTRANSITIVE);
case 7: /* EXTIN */ return extinguish(INTRANSITIVE);
case 8: /* WAVE */ return(8000);
case 9: /* CALM */ return(8000);
case 5: /* LOCK */ return lock(verb, INTRANSITIVE);
case 6: /* LIGHT */ return light(INTRANSITIVE);
case 7: /* EXTIN */ return extinguish(INTRANSITIVE);
case 8: /* WAVE */ return(8000);
case 9: /* CALM */ return(8000);
case 11: /* ATTAC */ return attack(input, verb, obj);
case 12: /* POUR */ return pour(obj);
case 13: /* EAT */ return eat(INTRANSITIVE);
case 11: /* ATTAC */ return attack(input, verb, obj);
case 12: /* POUR */ return pour(obj);
case 13: /* EAT */ return eat(INTRANSITIVE);
case 1: /* DROP */ return discard(obj, false);
case 2: /* SAY */ return say();
case 3: /* UNLOC */ return lock(verb, obj);
case 1: /* DROP */ return discard(obj, false);
case 2: /* SAY */ return say();
case 3: /* UNLOC */ return lock(verb, obj);
case 5: /* LOCK */ return lock(verb, obj);
case 6: /* LIGHT */ return light(obj);
case 7: /* EXTI */ return extinguish(obj);
case 8: /* WAVE */ return wave(obj);
case 5: /* LOCK */ return lock(verb, obj);
case 6: /* LIGHT */ return light(obj);
case 7: /* EXTI */ return extinguish(obj);
case 8: /* WAVE */ return wave(obj);
case 11: /* ATTAC */ return attack(input, verb, obj);
case 12: /* POUR */ return pour(obj);
case 13: /* EAT */ return eat(obj);
case 14: /* DRINK */ return drink(obj);
case 15: /* RUB */ return rub(obj);
case 16: /* TOSS */ return throw(input, verb, obj);
case 11: /* ATTAC */ return attack(input, verb, obj);
case 12: /* POUR */ return pour(obj);
case 13: /* EAT */ return eat(obj);
case 14: /* DRINK */ return drink(obj);
case 15: /* RUB */ return rub(obj);
case 16: /* TOSS */ return throw(input, verb, obj);
case 18: /* FIND */ return find(obj);
case 19: /* INVEN */ return find(obj);
case 20: /* FEED */ return feed(obj);
case 21: /* FILL */ return fill(obj);
case 22: /* BLAST */ return blast();
case 18: /* FIND */ return find(obj);
case 19: /* INVEN */ return find(obj);
case 20: /* FEED */ return feed(obj);
case 21: /* FILL */ return fill(obj);
case 22: /* BLAST */ return blast();
- case 23: /* SCOR */ return(2011);
- case 24: /* FOO */ return(2011);
- case 25: /* BRIEF */ return(2011);
+ case 23: /* SCOR */ {RSPEAK(SPK); return 2012;}
+ case 24: /* FOO */ {RSPEAK(SPK); return 2012;}
+ case 25: /* BRIEF */ {RSPEAK(SPK); return 2012;}
case 26: /* READ */ return read(input, obj);
case 27: /* BREAK */ return vbreak(obj);
case 28: /* WAKE */ return wake(obj);
case 26: /* READ */ return read(input, obj);
case 27: /* BREAK */ return vbreak(obj);
case 28: /* WAKE */ return wake(obj);