home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_100
/
159_01
/
itverb.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-17
|
5KB
|
365 lines
/* ITVERB.C no mod for V 1.43 */
#include "advent.h"
/*
Routines to process intransitive verbs
*/
VOID PASCAL itverb(VOID)
{
switch (verb)
{
case DROP:
case SAY:
case WAVE:
case CALM:
case RUB:
case THROW:
case FIND:
case FEED:
case BREAK:
case WAKE:
needobj();
break;
case TAKE:
ivtake();
break;
case OPEN:
case LOCK:
ivopen();
break;
case NOTHING:
rspeak(54);
break;
case ON:
case OFF:
case POUR:
trverb();
break;
case WALK:
actspk(verb);
break;
case KILL:
ivkill();
break;
#if 0
case EAT:
iveat();
break;
#endif
case DRINK:
ivdrink();
break;
case QUIT:
ivquit();
break;
#if 0
case FILL:
ivfill();
break;
#endif
case BLAST:
vblast();
break;
case SCORE:
score();
break;
case FOO:
ivfoo();
break;
case SUSPEND:
saveflg = 1;
break;
case INVENTORY:
inventory();
break;
case SAVE:
saveadv();
describe();
descitem();
break;
case RESTORE:
restore();
describe();
descitem();
break;
case BRIEF:
case VERBOSE:
brief_sw = (BRIEF == verb);
rspeak(54);
break;
default:
printf("This intransitive not implemented yet\n");
}
return;
}
/*
CARRY, TAKE etc.
*/
VOID PASCAL ivtake(VOID)
{
auto SHORT anobj, item;
anobj = 0;
for (item = 1; item < MAXOBJ; ++item)
{
if (place[item] == loc)
{
if (anobj != 0)
{
needobj();
return;
}
anobj = item;
}
}
if (anobj == 0 || (dcheck() && dflag >= 2))
{
needobj();
return;
}
object = anobj;
vtake();
return;
}
/*
OPEN, LOCK, UNLOCK
*/
VOID PASCAL ivopen(VOID)
{
if (here(CLAM))
object = CLAM;
if (here(OYSTER))
object = OYSTER;
if (at(DOOR))
object = DOOR;
if (at(GRATE))
object = GRATE;
if (here(CHAIN))
{
if (object != 0)
{
needobj();
return;
}
object = CHAIN;
}
if (object == 0)
{
rspeak(28);
return;
}
vopen();
return;
}
/*
ATTACK, KILL etc
*/
VOID PASCAL ivkill(VOID)
{
object1 = 0;
if (dcheck() && dflag >= 2)
object = DWARF;
if (here(SNAKE))
addobj(SNAKE);
if (at(DRAGON) && prop[DRAGON] == 0)
addobj(DRAGON);
if (at(TROLL))
addobj(TROLL);
if (here(BEAR) && prop[BEAR] == 0)
addobj(BEAR);
if (object1 != 0)
{
needobj();
return;
}
if (object != 0)
{
vkill();
return;
}
if (here(BIRD) && verb != THROW)
object = BIRD;
if (here(CLAM) || here(OYSTER))
addobj(CLAM);
if (object1 != 0)
{
needobj();
return;
}
vkill();
return;
}
/*
EAT
*/
VOID PASCAL iveat(VOID)
{
if(!here(FOOD))
needobj();
else
{
object=FOOD;
veat();
}
return;
}
/*
DRINK
*/
VOID PASCAL ivdrink(VOID)
{
if (liqloc(loc) != WATER && (liq() != WATER || !here(BOTTLE)))
needobj();
else
{
object = WATER;
vdrink();
}
return;
}
/*
QUIT
*/
VOID PASCAL ivquit(VOID)
{
if (gaveup = yes(22, 54, 54))
normend();
return;
}
/*
FILL
*/
VOID PASCAL ivfill(VOID)
{
if (!here(BOTTLE))
needobj();
else
{
object=BOTTLE;
vfill();
}
return;
}
/*
Handle fee fie foe foo...
*/
VOID PASCAL ivfoo(VOID)
{
auto SHORT k, msg;
k = vocab(word1, 3000);
msg = 42;
if (foobar != 1 - k)
{
if (foobar != 0)
msg = 151;
rspeak(msg);
return;
}
foobar = k;
if (k != 4)
return;
foobar = 0;
if (place[EGGS] == 92 ||
(toting(EGGS) && loc == 92))
{
rspeak(msg);
return;
}
if (place[EGGS] == 0 && place[TROLL] == 0 && prop[TROLL] == 0)
prop[TROLL] = 1;
if (here(EGGS))
k = 1;
else
{
if (loc == 92)
k = 0;
else
k = 2;
}
move(EGGS, 92);
pspeak(EGGS, k);
return;
}
/*
read etc...
*/
VOID PASCAL ivread(VOID)
{
if (here(MAGAZINE))
object = MAGAZINE;
if (here(TABLET))
object = object * 100 + TABLET;
if (here(MESSAGE))
object = object*100 + MESSAGE;
if (object > 100 || object == 0 || dark())
{
needobj();
return;
}
vread();
return;
}
/*
INVENTORY
*/
VOID PASCAL inventory(VOID)
{
auto SHORT msg;
auto SHORT i;
msg = 98;
for (i = 1; i <= MAXOBJ; ++i)
{
if (i == BEAR || !toting(i))
continue;
if (msg)
rspeak(99);
msg = 0;
pspeak(i, -1);
}
if (toting(BEAR))
msg = 141;
if (msg)
rspeak(msg);
return;
}
/*
ensure uniqueness as objects are searched
out for an intransitive verb
*/
VOID PASCAL addobj(SHORT obj)
{
if (object1 != 0)
return;
if (object != 0)
{
object1 = -1;
return;
}
object = obj;
return;
}