Merge branch 'master' into actions-arithmetic
This commit is contained in:
commit
adbbd1df25
17 changed files with 3593 additions and 127 deletions
60
actions.c
60
actions.c
|
@ -48,7 +48,7 @@ static int attack(FILE *input, long verb, token_t obj)
|
|||
RSPEAK(spk);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
DSTROY(BIRD);
|
||||
DESTROY(BIRD);
|
||||
game.prop[BIRD]=0;
|
||||
spk=BIRD_DEAD;
|
||||
}
|
||||
|
@ -69,27 +69,23 @@ static int attack(FILE *input, long verb, token_t obj)
|
|||
if (obj == OGRE && d > 0) {
|
||||
RSPEAK(spk);
|
||||
RSPEAK(KNIFE_THROWN);
|
||||
DSTROY(OGRE);
|
||||
int k=0;
|
||||
DESTROY(OGRE);
|
||||
int dwarves=0;
|
||||
for (int i=1; i < PIRATE; i++) {
|
||||
if (game.dloc[i] == game.loc) {
|
||||
++k;
|
||||
++dwarves;
|
||||
game.dloc[i] = LOC_LONGWEST;
|
||||
game.dseen[i]=false;
|
||||
}
|
||||
}
|
||||
spk=k == 2 ? OGRE_PANIC1 : OGRE_PANIC2;
|
||||
spk=dwarves == 2 ? OGRE_PANIC1 : OGRE_PANIC2;
|
||||
RSPEAK(spk);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
|
||||
if (obj == BEAR)
|
||||
else 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);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
else if (obj == DRAGON && game.prop[DRAGON] == 0) {
|
||||
/* 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,
|
||||
|
@ -115,6 +111,10 @@ static int attack(FILE *input, long verb, token_t obj)
|
|||
return GO_MOVE;
|
||||
}
|
||||
|
||||
RSPEAK(spk);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
|
||||
static int bigwords(long foo)
|
||||
/* FEE FIE FOE FOO (AND FUM). Advance to next state if given in proper order.
|
||||
* Look up WD1 in section 3 of vocab to determine which word we've got. Last
|
||||
|
@ -161,7 +161,7 @@ static int bivalve(token_t verb, token_t obj)
|
|||
if (!TOTING(TRIDNT))spk= is_oyster ? OYSTER_OPENER : CLAM_OPENER;
|
||||
if (verb == LOCK)spk=HUH_MAN;
|
||||
if (spk == PEARL_FALLS) {
|
||||
DSTROY(CLAM);
|
||||
DESTROY(CLAM);
|
||||
DROP(OYSTER,game.loc);
|
||||
DROP(PEARL,LOC_CULDESAC);
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ static int carry(token_t verb, token_t obj)
|
|||
if (obj == SIGN)spk=HAND_PASSTHROUGH;
|
||||
if (obj == MESSAG) {
|
||||
RSPEAK(REMOVE_MESSAGE);
|
||||
DSTROY(MESSAG);
|
||||
DESTROY(MESSAG);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
if (game.fixed[obj] != 0) {
|
||||
|
@ -269,7 +269,7 @@ static int carry(token_t verb, token_t obj)
|
|||
}
|
||||
else if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
|
||||
if (game.prop[BIRD] == 2) {
|
||||
DSTROY(BIRD);
|
||||
DESTROY(BIRD);
|
||||
RSPEAK(BIRD_CRAP);
|
||||
return GO_CLEAROBJ;
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ static int carry(token_t verb, token_t obj)
|
|||
CARRY(BIRD+CAGE-obj,game.loc);
|
||||
CARRY(obj,game.loc);
|
||||
if (obj == BOTTLE && LIQUID() != 0)
|
||||
game.place[LIQUID()] = -1;
|
||||
game.place[LIQUID()] = CARRIED;
|
||||
if (GSTONE(obj) && game.prop[obj] != 0) {
|
||||
game.prop[obj]=0;
|
||||
game.prop[CAVITY]=1;
|
||||
|
@ -335,7 +335,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
|
|||
if (obj == BIRD && HERE(SNAKE)) {
|
||||
RSPEAK(BIRD_ATTACKS);
|
||||
if (game.closed) return GO_DWARFWAKE;
|
||||
DSTROY(SNAKE);
|
||||
DESTROY(SNAKE);
|
||||
/* Set game.prop for use by travel options */
|
||||
game.prop[SNAKE]=1;
|
||||
|
||||
|
@ -357,13 +357,13 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
|
|||
}
|
||||
}
|
||||
} else if (obj == COINS && HERE(VEND)) {
|
||||
DSTROY(COINS);
|
||||
DESTROY(COINS);
|
||||
DROP(BATTER,game.loc);
|
||||
PSPEAK(BATTER,0);
|
||||
return GO_CLEAROBJ;
|
||||
} else if (obj == BIRD && AT(DRAGON) && game.prop[DRAGON] == 0) {
|
||||
RSPEAK(BIRD_BURNT);
|
||||
DSTROY(BIRD);
|
||||
DESTROY(BIRD);
|
||||
game.prop[BIRD]=0;
|
||||
return GO_CLEAROBJ;
|
||||
} else if (obj == BEAR && AT(TROLL)) {
|
||||
|
@ -386,7 +386,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
|
|||
int k = LIQUID();
|
||||
if (k == obj)obj=BOTTLE;
|
||||
if (obj == BOTTLE && k != 0)
|
||||
game.place[k]=0;
|
||||
game.place[k] = NOWHERE;
|
||||
if (obj == CAGE && game.prop[BIRD] == 1)DROP(BIRD,game.loc);
|
||||
DROP(obj,game.loc);
|
||||
if (obj != BIRD) return GO_CLEAROBJ;
|
||||
|
@ -406,11 +406,11 @@ static int drink(token_t verb, token_t obj)
|
|||
if (obj != 0 && obj != WATER)spk=RIDICULOUS_ATTEMPT;
|
||||
if (spk != RIDICULOUS_ATTEMPT && LIQUID() == WATER && HERE(BOTTLE)) {
|
||||
game.prop[BOTTLE] = 1;
|
||||
game.place[WATER]=0;
|
||||
game.place[WATER] = NOWHERE;
|
||||
spk=BOTTLE_EMPTY;
|
||||
}
|
||||
} else {
|
||||
DSTROY(BLOOD);
|
||||
DESTROY(BLOOD);
|
||||
game.prop[DRAGON]=2;
|
||||
OBJSND[BIRD]=OBJSND[BIRD]+3;
|
||||
spk=HEAD_BUZZES;
|
||||
|
@ -427,11 +427,11 @@ static int eat(token_t verb, token_t obj)
|
|||
if (obj == INTRANSITIVE) {
|
||||
if (!HERE(FOOD))
|
||||
return GO_UNKNOWN;
|
||||
DSTROY(FOOD);
|
||||
DESTROY(FOOD);
|
||||
spk=THANKS_DELICIOUS;
|
||||
} else {
|
||||
if (obj == FOOD) {
|
||||
DSTROY(FOOD);
|
||||
DESTROY(FOOD);
|
||||
spk=THANKS_DELICIOUS;
|
||||
}
|
||||
if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj ==
|
||||
|
@ -481,7 +481,7 @@ static int feed(token_t verb, token_t obj)
|
|||
if (obj == DRAGON && game.prop[DRAGON] != 0)spk=RIDICULOUS_ATTEMPT;
|
||||
if (obj == TROLL)spk=TROLL_VICES;
|
||||
if (obj == SNAKE && !game.closed && HERE(BIRD)) {
|
||||
DSTROY(BIRD);
|
||||
DESTROY(BIRD);
|
||||
game.prop[BIRD]=0;
|
||||
spk = BIRD_DEVOURED;
|
||||
}
|
||||
|
@ -496,7 +496,7 @@ static int feed(token_t verb, token_t obj)
|
|||
if (game.prop[BEAR] == 0)spk=NOTHING_EDIBLE;
|
||||
if (game.prop[BEAR] == 3)spk=RIDICULOUS_ATTEMPT;
|
||||
if (HERE(FOOD)) {
|
||||
DSTROY(FOOD);
|
||||
DESTROY(FOOD);
|
||||
game.prop[BEAR]=1;
|
||||
game.fixed[AXE]=0;
|
||||
game.prop[AXE]=0;
|
||||
|
@ -537,7 +537,7 @@ int fill(token_t verb, token_t obj)
|
|||
spk=FILL_INVALID;
|
||||
k=LIQUID();
|
||||
if (k == 0 || !HERE(BOTTLE)) {RSPEAK(spk); return GO_CLEAROBJ;}
|
||||
game.place[k]=0;
|
||||
game.place[k] = NOWHERE;
|
||||
game.prop[BOTTLE] = 1;
|
||||
if (k == OIL)game.prop[URN]=1;
|
||||
spk=WATER_URN+game.prop[URN];
|
||||
|
@ -561,7 +561,7 @@ int fill(token_t verb, token_t obj)
|
|||
game.prop[BOTTLE]=MOD(COND[game.loc],4)/2*2;
|
||||
k=LIQUID();
|
||||
if (TOTING(BOTTLE))
|
||||
game.place[k] = -1;
|
||||
game.place[k] = CARRIED;
|
||||
if (k == OIL)
|
||||
spk=BOTTLED_OIL;
|
||||
}
|
||||
|
@ -690,7 +690,7 @@ static int listen(void)
|
|||
PSPEAK(i,OBJSND[i]+game.prop[i]);
|
||||
spk=ARB_0;
|
||||
if (i == BIRD && OBJSND[i]+game.prop[i] == 8)
|
||||
DSTROY(BIRD);
|
||||
DESTROY(BIRD);
|
||||
}
|
||||
RSPEAK(spk);
|
||||
return GO_CLEAROBJ;
|
||||
|
@ -753,7 +753,7 @@ static int pour(token_t verb, token_t obj)
|
|||
if (HERE(URN) && game.prop[URN] == 0)
|
||||
return fill(verb, URN);
|
||||
game.prop[BOTTLE] = 1;
|
||||
game.place[obj]=0;
|
||||
game.place[obj] = NOWHERE;
|
||||
spk=GROUND_WET;
|
||||
if (!(AT(PLANT) || AT(DOOR)))
|
||||
{RSPEAK(spk); return GO_CLEAROBJ;}
|
||||
|
@ -838,7 +838,7 @@ static int rub(token_t verb, token_t obj)
|
|||
if (obj != LAMP)
|
||||
spk=PECULIAR_NOTHING;
|
||||
if (obj == URN && game.prop[URN] == 2) {
|
||||
DSTROY(URN);
|
||||
DESTROY(URN);
|
||||
DROP(AMBER,game.loc);
|
||||
game.prop[AMBER]=1;
|
||||
--game.tally;
|
||||
|
|
8
advent.h
8
advent.h
|
@ -94,7 +94,6 @@ extern long GETTXT(bool,bool,bool);
|
|||
extern token_t MAKEWD(long);
|
||||
extern void TYPE0(void);
|
||||
extern long VOCAB(long,long);
|
||||
extern void DSTROY(long);
|
||||
extern void JUGGLE(long);
|
||||
extern void MOVE(long,long);
|
||||
extern long PUT(long,long,long);
|
||||
|
@ -131,8 +130,9 @@ extern int saveresume(FILE *, bool);
|
|||
* PCT(N) = true N% of the time (N integer from 0 to 100)
|
||||
* TOTING(OBJ) = true if the OBJ is being carried */
|
||||
|
||||
#define DESTROY(N) MOVE(N, NOWHERE)
|
||||
#define MOD(N,M) ((N) % (M))
|
||||
#define TOTING(OBJ) (game.place[OBJ] == -1)
|
||||
#define TOTING(OBJ) (game.place[OBJ] == CARRIED)
|
||||
#define AT(OBJ) (game.place[OBJ] == game.loc || game.fixed[OBJ] == game.loc)
|
||||
#define HERE(OBJ) (AT(OBJ) || TOTING(OBJ))
|
||||
#define LIQ2(PBOTL) ((1-(PBOTL))*WATER+((PBOTL)/2)*(WATER+OIL))
|
||||
|
@ -207,6 +207,10 @@ enum speechpart {unknown, intransitive, transitive};
|
|||
#define HOGRE 19 /* Trying to deal with ogre */
|
||||
#define HJADE 20 /* Found all treasures except jade */
|
||||
|
||||
/* Special object statuses in game.place - can also be a location number (> 0) */
|
||||
#define CARRIED -1 /* Player is toting it */
|
||||
#define NOWHERE 0 /* It's destroyed */
|
||||
|
||||
/* hack to ignore GCC Unused Result */
|
||||
#define IGNORE(r) do{if (r){}}while(0)
|
||||
|
||||
|
|
2
init.c
2
init.c
|
@ -176,7 +176,7 @@ void initialise(void)
|
|||
printf("Initialising...\n");
|
||||
|
||||
for (int i=1; i<=NOBJECTS; i++) {
|
||||
game.place[i]=0;
|
||||
game.place[i] = NOWHERE;
|
||||
game.prop[i] = 0;
|
||||
game.link[i+NOBJECTS]=game.link[i]=0;
|
||||
}
|
||||
|
|
16
main.c
16
main.c
|
@ -262,8 +262,8 @@ bool spotted_by_pirate(int i)
|
|||
|
||||
/* The pirate's spotted him. He leaves him alone once we've
|
||||
* found chest. K counts if a treasure is here. If not, and
|
||||
* tally=1 for an unseen chest, let the pirate be spotted.
|
||||
* Note that game.place[CHEST]=0 might mean that he's thrown
|
||||
* tally=1 for an unseen chest, let the pirate be spotted. Note
|
||||
* that game.place[CHEST] = NOWHERE might mean that he's thrown
|
||||
* it to the troll, but in that case he's seen the chest
|
||||
* (game.prop=0). */
|
||||
if (game.loc == game.chloc || game.prop[CHEST] >= 0)
|
||||
|
@ -284,7 +284,7 @@ bool spotted_by_pirate(int i)
|
|||
}
|
||||
}
|
||||
/* Force chest placement before player finds last treasure */
|
||||
if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1) {
|
||||
if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == NOWHERE && HERE(LAMP) && game.prop[LAMP] == 1) {
|
||||
RSPEAK(PIRATE_SPOTTED);
|
||||
movechest = true;
|
||||
}
|
||||
|
@ -481,8 +481,8 @@ static void croak(FILE *cmdin)
|
|||
score(endgame);
|
||||
if (game.numdie == MAXDIE)
|
||||
score(endgame);
|
||||
game.place[WATER]=0;
|
||||
game.place[OIL]=0;
|
||||
game.place[WATER] = NOWHERE;
|
||||
game.place[OIL] = NOWHERE;
|
||||
if (TOTING(LAMP))
|
||||
game.prop[LAMP]=0;
|
||||
for (int j=1; j<=NOBJECTS; j++) {
|
||||
|
@ -754,7 +754,7 @@ static bool closecheck(void)
|
|||
MOVE(TROLL2,PLAC[TROLL]);
|
||||
MOVE(TROLL2+NOBJECTS,FIXD[TROLL]);
|
||||
JUGGLE(CHASM);
|
||||
if (game.prop[BEAR] != 3)DSTROY(BEAR);
|
||||
if (game.prop[BEAR] != 3)DESTROY(BEAR);
|
||||
game.prop[CHAIN]=0;
|
||||
game.fixed[CHAIN]=0;
|
||||
game.prop[AXE]=0;
|
||||
|
@ -807,7 +807,7 @@ static bool closecheck(void)
|
|||
|
||||
for (int i=1; i<=NOBJECTS; i++) {
|
||||
if (TOTING(i))
|
||||
DSTROY(i);
|
||||
DESTROY(i);
|
||||
}
|
||||
|
||||
RSPEAK(CAVE_CLOSED);
|
||||
|
@ -848,7 +848,7 @@ static void lampcheck(void)
|
|||
if (!game.lmwarn && HERE(LAMP)) {
|
||||
game.lmwarn=true;
|
||||
int spk=GET_BATTERIES;
|
||||
if (game.place[BATTER] == 0)spk=LAMP_DIM;
|
||||
if (game.place[BATTER] == NOWHERE)spk=LAMP_DIM;
|
||||
if (game.prop[BATTER] == 1)spk=MISSING_BATTERIES;
|
||||
RSPEAK(spk);
|
||||
}
|
||||
|
|
14
misc.c
14
misc.c
|
@ -337,12 +337,6 @@ long VOCAB(long id, long init)
|
|||
BUG(21);
|
||||
}
|
||||
|
||||
void DSTROY(long object)
|
||||
/* Permanently eliminate "object" by moving to a non-existent location. */
|
||||
{
|
||||
MOVE(object,0);
|
||||
}
|
||||
|
||||
void JUGGLE(long object)
|
||||
/* Juggle an object by picking it up and putting it down again, the purpose
|
||||
* being to get the object to the front of the chain of things at its loc. */
|
||||
|
@ -367,7 +361,7 @@ void MOVE(long object, long where)
|
|||
from=game.fixed[object-NOBJECTS];
|
||||
else
|
||||
from=game.place[object];
|
||||
if (from > 0 && !SPECIAL(from))
|
||||
if (from != NOWHERE && from != CARRIED && !SPECIAL(from))
|
||||
CARRY(object,from);
|
||||
DROP(object,where);
|
||||
}
|
||||
|
@ -388,9 +382,9 @@ void CARRY(long object, long where)
|
|||
long temp;
|
||||
|
||||
if (object <= NOBJECTS) {
|
||||
if (game.place[object] == -1)
|
||||
if (game.place[object] == CARRIED)
|
||||
return;
|
||||
game.place[object]= -1;
|
||||
game.place[object] = CARRIED;
|
||||
++game.holdng;
|
||||
}
|
||||
if (game.atloc[where] == object) {
|
||||
|
@ -412,7 +406,7 @@ void DROP(long object, long where)
|
|||
game.fixed[object-NOBJECTS] = where;
|
||||
else
|
||||
{
|
||||
if (game.place[object] == -1)
|
||||
if (game.place[object] == CARRIED)
|
||||
--game.holdng;
|
||||
game.place[object] = where;
|
||||
}
|
||||
|
|
4
score.c
4
score.c
|
@ -41,7 +41,7 @@ void score(enum termination mode)
|
|||
if(i > CHEST)k=16;
|
||||
if(game.prop[i] >= 0)
|
||||
score += 2;
|
||||
if(game.place[i] == 3 && game.prop[i] == 0)
|
||||
if(game.place[i] == LOC_BUILDING && game.prop[i] == 0)
|
||||
score += k-2;
|
||||
mxscor += k;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ void score(enum termination mode)
|
|||
mxscor += 45;
|
||||
|
||||
/* Did he come to Witt's End as he should? */
|
||||
if(game.place[MAGZIN] == 108)
|
||||
if(game.place[MAGZIN] == LOC_WITTSEND)
|
||||
score += 1;
|
||||
mxscor += 1;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ all: regress
|
|||
.SUFFIXES: .chk
|
||||
|
||||
clean:
|
||||
rm -fr *~ adventure.text *.adv
|
||||
rm -fr *~ adventure.text *.adv scratch.tmp
|
||||
|
||||
# Show summary lines for all tests.
|
||||
testlist:
|
||||
|
@ -32,7 +32,8 @@ buildregress:
|
|||
echo "Remaking $${file}.chk"; \
|
||||
OPTS=`sed -n /#options:/s///p <$${file}.log`; \
|
||||
advent $$OPTS <$${file}.log >$${file}.chk 2>&1 || exit 1; \
|
||||
done
|
||||
done; \
|
||||
rm -f scratch.tmp
|
||||
regress:
|
||||
@for file in $(TESTLOADS); do \
|
||||
$(ECHO) -n " $${file} "; grep '##' $${file}.log || echo ' ## (no description)'; \
|
||||
|
@ -41,6 +42,6 @@ regress:
|
|||
then diff --text -u $${file}.chk /tmp/regress$$$$ || exit 1; \
|
||||
else echo "*** Nonzero return status on $${file}!"; exit 1; fi \
|
||||
done; \
|
||||
rm -f /tmp/regress$$$$
|
||||
rm -f scratch.tmp /tmp/regress$$$$
|
||||
|
||||
# end
|
||||
|
|
2927
tests/breakmirror.chk
Normal file
2927
tests/breakmirror.chk
Normal file
File diff suppressed because it is too large
Load diff
471
tests/breakmirror.log
Normal file
471
tests/breakmirror.log
Normal file
|
@ -0,0 +1,471 @@
|
|||
## Break the mirror in endgame and die
|
||||
n
|
||||
seed 1838473132
|
||||
in
|
||||
take lamp
|
||||
xyzzy
|
||||
on
|
||||
take rod
|
||||
e
|
||||
take cage
|
||||
w
|
||||
w
|
||||
w
|
||||
drop rod
|
||||
take bird
|
||||
take rod
|
||||
w
|
||||
free bird
|
||||
wave rod
|
||||
take necklace
|
||||
drop rod
|
||||
take bird
|
||||
take rod
|
||||
d
|
||||
d
|
||||
free bird
|
||||
drop rod
|
||||
drop cage
|
||||
take cage
|
||||
take bird
|
||||
w
|
||||
take coins
|
||||
e
|
||||
s
|
||||
take jewelry
|
||||
n
|
||||
up
|
||||
s
|
||||
take gold
|
||||
n
|
||||
d
|
||||
n
|
||||
n
|
||||
plugh
|
||||
extinguish lamp
|
||||
drop coins
|
||||
drop jewelry
|
||||
drop necklace
|
||||
drop gold
|
||||
plugh
|
||||
on
|
||||
s
|
||||
take silver
|
||||
s
|
||||
sw
|
||||
take axe
|
||||
w
|
||||
kill dragon
|
||||
yes
|
||||
drink blood
|
||||
take rug
|
||||
e
|
||||
e
|
||||
up
|
||||
d
|
||||
n
|
||||
n
|
||||
off
|
||||
plugh
|
||||
inven
|
||||
drop rug
|
||||
drop silver
|
||||
out
|
||||
s
|
||||
w
|
||||
n
|
||||
take appendage
|
||||
free bird
|
||||
drop cage
|
||||
listen
|
||||
s
|
||||
s
|
||||
n
|
||||
in
|
||||
take water
|
||||
plugh
|
||||
on
|
||||
plover
|
||||
ne
|
||||
take pyramid
|
||||
s
|
||||
plover
|
||||
s
|
||||
s
|
||||
take rod
|
||||
up
|
||||
w
|
||||
wave rod
|
||||
drop rod
|
||||
west
|
||||
take diamonds
|
||||
w
|
||||
w
|
||||
w
|
||||
s
|
||||
sw
|
||||
se
|
||||
s
|
||||
kill machine
|
||||
s
|
||||
s
|
||||
kill ogre
|
||||
n
|
||||
take ruby
|
||||
s
|
||||
w
|
||||
n
|
||||
n
|
||||
n
|
||||
nw
|
||||
d
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
throw axe
|
||||
take axe
|
||||
n
|
||||
n
|
||||
n
|
||||
off
|
||||
plugh
|
||||
drop ruby
|
||||
drop diamonds
|
||||
drop pyramid
|
||||
plugh
|
||||
on
|
||||
s
|
||||
s
|
||||
u
|
||||
n
|
||||
n
|
||||
d
|
||||
bedquilt
|
||||
throw axe
|
||||
take axe
|
||||
slab
|
||||
s
|
||||
d
|
||||
water plant
|
||||
u
|
||||
w
|
||||
u
|
||||
reservoir
|
||||
H'CFL
|
||||
n
|
||||
n
|
||||
nw
|
||||
u
|
||||
u
|
||||
u
|
||||
u
|
||||
ne
|
||||
take ebony
|
||||
sw
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
take water
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
d
|
||||
s
|
||||
d
|
||||
water plant
|
||||
u
|
||||
drop appendage
|
||||
e
|
||||
d
|
||||
get oil
|
||||
|
||||
u
|
||||
w
|
||||
d
|
||||
climb
|
||||
w
|
||||
n
|
||||
oil door
|
||||
drop bottle
|
||||
n
|
||||
take trident
|
||||
w
|
||||
d
|
||||
se
|
||||
n
|
||||
w
|
||||
drop trident
|
||||
drop ebony
|
||||
drop axe
|
||||
drop lantern
|
||||
e
|
||||
take emerald
|
||||
w
|
||||
take lamp
|
||||
take axe
|
||||
take ebony
|
||||
take trident
|
||||
nw
|
||||
s
|
||||
take vase
|
||||
se
|
||||
throw axe
|
||||
take axe
|
||||
e
|
||||
take pillow
|
||||
w
|
||||
drop axe
|
||||
ne
|
||||
e
|
||||
n
|
||||
open clam
|
||||
s
|
||||
u
|
||||
e
|
||||
u
|
||||
n
|
||||
off
|
||||
plugh
|
||||
drop pillow
|
||||
drop vase
|
||||
drop trident
|
||||
drop emerald
|
||||
drop ebony
|
||||
take keys
|
||||
take food
|
||||
plugh
|
||||
on
|
||||
s
|
||||
d
|
||||
w
|
||||
d
|
||||
n
|
||||
d
|
||||
d
|
||||
take pearl
|
||||
u
|
||||
u
|
||||
s
|
||||
w
|
||||
w
|
||||
w
|
||||
w
|
||||
d
|
||||
climb
|
||||
w
|
||||
get eggs
|
||||
n
|
||||
take bottle
|
||||
n
|
||||
w
|
||||
d
|
||||
sw
|
||||
u
|
||||
toss eggs
|
||||
ne
|
||||
ne
|
||||
barren
|
||||
in
|
||||
feed bear
|
||||
unlock chain
|
||||
take chain
|
||||
take bear
|
||||
fork
|
||||
ne
|
||||
e
|
||||
take spices
|
||||
drop keys
|
||||
fork
|
||||
w
|
||||
w
|
||||
sw
|
||||
free bear
|
||||
inven
|
||||
sw
|
||||
sw
|
||||
d
|
||||
se
|
||||
se
|
||||
w
|
||||
d
|
||||
get oil
|
||||
up
|
||||
e
|
||||
take axe
|
||||
w
|
||||
w
|
||||
d
|
||||
climb
|
||||
w
|
||||
fee
|
||||
fie
|
||||
foe
|
||||
foo
|
||||
take eggs
|
||||
s
|
||||
d
|
||||
u
|
||||
w
|
||||
u
|
||||
s
|
||||
e
|
||||
e
|
||||
n
|
||||
n
|
||||
off
|
||||
plugh
|
||||
drop eggs
|
||||
drop pearl
|
||||
drop spices
|
||||
drop chain
|
||||
take rug
|
||||
take ruby
|
||||
take emerald
|
||||
out
|
||||
w
|
||||
n
|
||||
n
|
||||
n
|
||||
inven
|
||||
fill urn
|
||||
light urn
|
||||
rub urn
|
||||
take amber
|
||||
drop rug
|
||||
drop emerald
|
||||
fly rug
|
||||
take sapphire
|
||||
fly rug
|
||||
take emerald
|
||||
drop ruby
|
||||
take rug
|
||||
drop bottle
|
||||
take ruby
|
||||
e
|
||||
s
|
||||
e
|
||||
e
|
||||
in
|
||||
drop ruby
|
||||
drop sapphire
|
||||
drop amber
|
||||
drop rug
|
||||
look
|
||||
plugh
|
||||
on
|
||||
s
|
||||
s
|
||||
u
|
||||
w
|
||||
w
|
||||
w
|
||||
s
|
||||
e
|
||||
s
|
||||
throw axe
|
||||
take axe
|
||||
s
|
||||
s
|
||||
n
|
||||
e
|
||||
e
|
||||
nw
|
||||
take emerald
|
||||
take chest
|
||||
se
|
||||
n
|
||||
d
|
||||
e
|
||||
e
|
||||
off
|
||||
xyzzy
|
||||
drop emerald
|
||||
drop chest
|
||||
plugh
|
||||
on
|
||||
s
|
||||
d
|
||||
w
|
||||
d
|
||||
e
|
||||
take magazine
|
||||
e
|
||||
drop magazine
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
u
|
||||
u
|
||||
e
|
||||
u
|
||||
n
|
||||
plover
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
# Everything to here is from endgame428
|
||||
sw
|
||||
break mirror
|
||||
|
||||
|
|
@ -1297,10 +1297,6 @@ You're in n/s passage above e/w passage.
|
|||
|
||||
You're in Hall of Mt King.
|
||||
|
||||
> drop axe
|
||||
|
||||
OK
|
||||
|
||||
> e
|
||||
|
||||
You're in Hall of Mists.
|
||||
|
@ -1380,10 +1376,7 @@ The pirate's treasure chest is here!
|
|||
You are currently holding the following:
|
||||
Brass lantern
|
||||
Velvet pillow
|
||||
|
||||
> take ebony
|
||||
|
||||
OK
|
||||
Dwarf's axe
|
||||
|
||||
> take vase
|
||||
|
||||
|
@ -1457,10 +1450,6 @@ There is food here.
|
|||
|
||||
OK
|
||||
|
||||
> drop ebony
|
||||
|
||||
OK
|
||||
|
||||
> drop pillow
|
||||
|
||||
OK
|
||||
|
@ -1601,7 +1590,11 @@ The way north leads through a massive, rusty, iron door.
|
|||
|
||||
> take bottle
|
||||
|
||||
OK
|
||||
You can't carry anything more. You'll have to drop something first.
|
||||
|
||||
> pour bottle
|
||||
|
||||
Bottl what?
|
||||
|
||||
> n
|
||||
|
||||
|
@ -1670,7 +1663,11 @@ There is a ferocious cave bear eying you from the far end of the room!
|
|||
|
||||
The bear is locked to the wall with a golden chain!
|
||||
|
||||
> feed bear
|
||||
> throw axe
|
||||
|
||||
The axe misses and lands near the bear where you can't get at it.
|
||||
|
||||
> throw food
|
||||
|
||||
The bear eagerly wolfs down your food, after which he seems to calm
|
||||
down considerably and even becomes rather friendly.
|
||||
|
@ -1700,15 +1697,14 @@ OK
|
|||
You are currently holding the following:
|
||||
Set of keys
|
||||
Brass lantern
|
||||
Small bottle
|
||||
Egg-sized emerald
|
||||
Glistening pearl
|
||||
|
||||
You are being followed by a very large, tame bear.
|
||||
|
||||
|
||||
You scored 239 out of a possible 430, using 295 turns.
|
||||
You scored 225 out of a possible 430, using 294 turns.
|
||||
|
||||
You may now consider yourself a "Seasoned Adventurer".
|
||||
|
||||
To achieve the next higher rating, you need 12 more points.
|
||||
To achieve the next higher rating, you need 26 more points.
|
||||
|
|
|
@ -223,7 +223,6 @@ u
|
|||
e
|
||||
u
|
||||
s
|
||||
drop axe
|
||||
e
|
||||
w
|
||||
w
|
||||
|
@ -238,7 +237,6 @@ e
|
|||
e
|
||||
nw
|
||||
inven
|
||||
take ebony
|
||||
take vase
|
||||
take trident
|
||||
take chest
|
||||
|
@ -251,7 +249,6 @@ e
|
|||
off
|
||||
xyzzy
|
||||
drop chest
|
||||
drop ebony
|
||||
drop pillow
|
||||
drop vase
|
||||
drop trident
|
||||
|
@ -279,7 +276,9 @@ climb
|
|||
w
|
||||
get eggs
|
||||
n
|
||||
# Test for "Ground wet" message
|
||||
take bottle
|
||||
pour bottle
|
||||
n
|
||||
w
|
||||
d
|
||||
|
@ -291,7 +290,8 @@ ne
|
|||
ne
|
||||
barren
|
||||
in
|
||||
feed bear
|
||||
throw axe
|
||||
throw food
|
||||
take chain
|
||||
unlock chain
|
||||
# Also tests message from bear in inventory
|
||||
|
|
26
tests/logopt.chk
Normal file
26
tests/logopt.chk
Normal file
|
@ -0,0 +1,26 @@
|
|||
|
||||
Welcome to Adventure!! Would you like instructions?
|
||||
|
||||
> > >
|
||||
You are standing at the end of a road before a small brick building.
|
||||
Around you is a forest. A small stream flows out of the building and
|
||||
down a gully.
|
||||
|
||||
>
|
||||
You are inside a building, a well house for a large spring.
|
||||
|
||||
There are some keys on the ground here.
|
||||
|
||||
There is a shiny brass lamp nearby.
|
||||
|
||||
There is food here.
|
||||
|
||||
There is a bottle of water here.
|
||||
|
||||
>
|
||||
>
|
||||
You scored 32 out of a possible 430, using 1 turn.
|
||||
|
||||
You are obviously a rank amateur. Better luck next time.
|
||||
|
||||
To achieve the next higher rating, you need 14 more points.
|
5
tests/logopt.log
Normal file
5
tests/logopt.log
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Exercise logging option and seed dump
|
||||
#options: -s -l scratch.tmp
|
||||
n
|
||||
in
|
||||
|
|
@ -7,8 +7,8 @@ You are standing at the end of a road before a small brick building.
|
|||
Around you is a forest. A small stream flows out of the building and
|
||||
down a gully.
|
||||
|
||||
> seed 1924231168
|
||||
Seed set to 1924231168
|
||||
> seed 739688815
|
||||
Seed set to 739688815
|
||||
|
||||
You're in front of building.
|
||||
|
||||
|
@ -507,10 +507,6 @@ You are in a maze of twisty little passages, all alike.
|
|||
|
||||
There is a little axe here.
|
||||
|
||||
> thake axe
|
||||
|
||||
Sorry, I don't know the word "THAKE".
|
||||
|
||||
> take axe
|
||||
|
||||
OK
|
||||
|
@ -524,10 +520,6 @@ You are in a maze of twisty little passages, all alike.
|
|||
|
||||
There is a little axe here.
|
||||
|
||||
> taje axe
|
||||
|
||||
Sorry, I don't know the word "TAJE".
|
||||
|
||||
> take axe
|
||||
|
||||
OK
|
||||
|
@ -584,17 +576,55 @@ You are in a maze of twisty little passages, all alike.
|
|||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> inven
|
||||
> n
|
||||
|
||||
You are currently holding the following:
|
||||
Brass lantern
|
||||
Wicker cage
|
||||
Little bird in cage
|
||||
Dwarf's axe
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> s
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> e
|
||||
|
||||
Dead end
|
||||
|
||||
> w
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> n
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> s
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> e
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
> sw
|
||||
|
||||
There is no way to go that direction.
|
||||
|
||||
You are in a maze of twisty little passages, all alike.
|
||||
|
||||
Do you need help getting out of the maze?
|
||||
|
||||
> y
|
||||
|
||||
I am prepared to give you a hint, but it will cost you 4 points.
|
||||
|
||||
Do you want the hint?
|
||||
|
||||
> y
|
||||
|
||||
You can make the passages look less alike by dropping things.
|
||||
|
||||
|
||||
You scored 75 out of a possible 430, using 108 turns.
|
||||
You scored 71 out of a possible 430, using 113 turns.
|
||||
|
||||
Your score qualifies you as a novice class adventurer.
|
||||
|
||||
To achieve the next higher rating, you need 46 more points.
|
||||
To achieve the next higher rating, you need 50 more points.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
n
|
||||
seed 1924231168
|
||||
seed 739688815
|
||||
seed 1071883378
|
||||
in
|
||||
take lamp
|
||||
|
@ -90,10 +90,8 @@ w
|
|||
throw axe
|
||||
take axe
|
||||
throw axe
|
||||
thake axe
|
||||
take axe
|
||||
throw axe
|
||||
taje axe
|
||||
take axe
|
||||
w
|
||||
w
|
||||
|
@ -108,4 +106,13 @@ w
|
|||
w
|
||||
w
|
||||
w
|
||||
inven
|
||||
n
|
||||
s
|
||||
e
|
||||
w
|
||||
n
|
||||
s
|
||||
e
|
||||
sw
|
||||
y
|
||||
y
|
||||
|
|
|
@ -96,6 +96,10 @@ It is now pitch dark. If you proceed you will likely fall into a pit.
|
|||
|
||||
Read what?
|
||||
|
||||
> read keys
|
||||
|
||||
I see no keys here.
|
||||
|
||||
> on lamp
|
||||
|
||||
Your lamp is now on.
|
||||
|
@ -137,7 +141,7 @@ have no bird seed.
|
|||
The little bird is now dead. Its body disappears.
|
||||
|
||||
|
||||
You scored 32 out of a possible 430, using 23 turns.
|
||||
You scored 32 out of a possible 430, using 24 turns.
|
||||
|
||||
You are obviously a rank amateur. Better luck next time.
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ w
|
|||
take cage
|
||||
w
|
||||
read
|
||||
read keys
|
||||
on lamp
|
||||
read
|
||||
w
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue