CHAPTER 5

DRACULA



   10 DIM E(50):X=0
   20 CLS:PRINT''CHR$129"Do you want the
 instructions(Y or N) ?";:Z$=GET$:IF Z$=
"N" THEN 130 ELSE IF Z$="Y" THEN 30 ELSE
 20
   30 CLS:PRINT''CHR$130"You have to esc
ape from the castle with"CHR$130"a previ
ous jewel,which Dracula removed "CHR$130
"from your kingdom."
   40 TIME=0:REPEAT UNTIL TIME>500
   50 PRINT''CHR$131"Dracula's guards th
rew you into a cell "CHR$131"on catching
 you entering the castle."
   60 TIME=0:REPEAT UNTIL TIME>400
   70 PRINT''CHR$132"Your time is limite
d before your escape"CHR$132"from the ce
ll will be noticed."
   80 TIME=0:REPEAT UNTIL TIME>400
   90 PRINT''CHR$133" The computer has a
 fairly large number"CHR$133"of commands
,so therefore if one command"CHR$133"doe
s not work then try another."
  100 TIME=0:REPEAT UNTIL TIME>500
  110 PRINT''CHR$134"The first three let
ters of each command"CHR$134"and object 
need be typed in,although,if"CHR$134"des
ired,the full word may be entered."
  120 TIME=0:REPEAT UNTIL TIME>500
  130 RESTORE 2000:FOR B=1 TO 50:READ E(
B):NEXT B
  140 CLS:A=1:W=0:R=1:B$="":S=0:T=0:U=0:
SOUND 1,0,1,1
  150 RESTORE 840
  160 ENVELOPE 1,1,-1,1,-1,0,15,30,0,0,0
,0,W/2.5,0
  170 SOUND 1,1,W/2,1
  180 IF A=55 THEN 270
  190 W=W+1
  200 IF W>34 AND W<70 PRINT CHR$130"Dra
cula has detected your presence."
  210 IF W>69 AND W<105 PRINT CHR$130"Dr
acula is out to destroy you."
  220 IF W>104 AND W<140 PRINT CHR$130"I
'd advise you to hurry up."
  230 IF W>139 AND W<175 PRINT CHR$130"Y
ou do not have much time left."
  240 IF W>174 AND W<210 PRINT CHR$130"D
racula is coming nearer."
  250 IF W>209 PRINT CHR$130"He does not
 intend to let you escape."
  260 IF W=245 THEN 1620
  270 IF A=54 AND E(9)<>0 PRINT CHR$130"
The dwarf kills you.":GOTO 1010
  280 IF A=53 AND E(7)<>0 AND E(48)<>47 
AND E(47)<>34 PRINT CHR$130"Dracula has 
hypnotised you.":GOTO 1010
  290 IF A=53 AND E(16)<>0 THEN 1620
  300 IF A=11 AND B$<>"Y" PRINT CHR$130"
A computer asks if you think that this "
CHR$130"program is good(answer Y or N)."
  310 IF E(36)=49 AND E(43)=49 E(36)=56:
PRINT CHR$130"The serpent has killed the
 dragon."
  320 IF A=28 AND E(44)<>-1 PRINT CHR$13
0"You have fallen down the pit.":GOTO 10
10
  330 IF A=28 PRINT CHR$130" Your rubber
-boots give you grip on the"CHR$130"slip
pery surface."
  340 IF A=23 AND E(14)=0 and E(2)<>0 E(
14)=56:PRINT CHR$130"The jewel has falle
n into the pool."
  350 IF A=14 AND R<4 PRINT CHR$130"The 
werewolf has awoken and killed you.":GOT
O 1010
  360 IF A=55 AND E(14)<>0 PRINT CHR$130
"You have failed to recover the jewel.":
GOTO 1010
  370 IF E(40)=27 AND E(20)=27 E(40)=56:
E(20)=56:E(21)=27:PRINT CHR$130"A skelet
on key has been formed."
  380 IF E(23)=42 AND E(39)=42 E(23)=56:
PRINT CHR$130"Your acid has dissolved th
e web."
  390 IF A=35 AND E(4)<>0 OR A=24 AND E(
10)<>56 PRINT CHR$130"You have been atta
cked by wolves.":GOTO 1010
  400 IF A=35 AND E(10)=A PRINT CHR$130"
Your lit-candles frighten the wolves."
  410 IF A<>32 E(31)=32
  420 IF A=7 AND E(1)<>0 PRINT CHR$130"A
 robot has killed you.":GOTO 1010
  430 IF A=7 AND E(30)=56 E(30)=7:PRINT 
CHR$130"A robot,seeing your gun,dropped 
a key."
  440 IF A=22 PRINT CHR$130"The ceiling 
has collapsed.":GOTO 1010
  450 IF A=26 AND E(13)<>0 PRINT CHR$130
"You are hit by laser beams.":GOTO 1010
  460 IF A=26 PRINT CHR$130"Your shield 
deflects some laser beams."
  470 FOR B=1 TO A:READ A$:NEXT B
  480 VDU 31,0,3,130:PRINT A$
  490 PRINT'CHR$131"Exits:- ";:RESTORE 7
70:FOR C=1 TO A:READ D:NEXT C:IF D<>0 PR
INT":North:";
  500 RESTORE 780:FOR C=1 TO A:READ D:NE
XT C:IF D<>0 PRINT":South:";
  510 RESTORE 790:FOR C=1 TO A:READ D:NE
XT C:IF D<>0 PRINT":East:";
  520 RESTORE 800:FOR C=1 TO A:READ D:NE
XT C:IF D<>0 PRINT":West:";
  530 PRINT''CHR$132"Objects:- ";
  540 H=0:RESTORE 810
  550 FOR G=1 TO 50:READ C$:IF E(G)<>A O
R H=6 NEXT G ELSE PRINT":";C$;":";:H=H+1
:IF H<>2 AND H<>4 NEXT G ELSE PRINT'CHR$
132"          ";:NEXT G
  560 PRINT''CHR$133"Inventory:- ";
  570 F=0:RESTORE 810
  580 FOR G=1 TO 50:READ C$:IF E(G)<>0 A
ND E(G)<>-1 OR F=6 NEXT G ELSE PRINT":";
C$;":";:F=F+1:IF F<>2 AND F<>4 NEXT G EL
SE PRINT'CHR$133"            ";:NEXT G
  590 VDU 31,0,15,134:PRINT"[-----------
--------------------------]"
  600 VDU 31,0,19,134:PRINT"[-----------
--------------------------]":VDU 31,0,17
,135
  610 IF A=55 E(9)=56:GOTO 1790
  620 IF A=11 AND B$<>"Y" INPUT"Command?
 "B$:CLS:VDU 31,0,21:GOTO 150
  630 INPUT"Command? "B$
  640 CLS:VDU 31,0,21,130
  650 IF E(22)=0 AND B$="X*Y+Z-5=W/V" E(
22)=56:E(40)=0:PRINT"A glue has been for
med.":GOTO 150
  660 IF E(29)=56 AND LEFT$(B$,1)="N" PR
INT"The guard will not let you pass.":GO
TO 150
  670 IF LEFT$(B$,3)="EXA" OR LEFT$(B$,3
)="WEA" OR LEFT$(B$,3)="EMP" THEN 900
  680 IF LEFT$(B$,1)<>"N" THEN 690 ELSE 
RESTORE 770:FOR C=1 TO A:READ D:NEXT C:I
F D=0 THEN 760 ELSE 720
  690 IF LEFT$(B$,1)<>"S" THEN 700 ELSE 
RESTORE 780:FOR C=1 TO A:READ D:NEXT C:I
F D=0 THEN 760 ELSE 720
  700 IF LEFT$(B$,1)<>"E" THEN 710 ELSE 
RESTORE 790:FOR C=1 TO A:READ D:NEXT C:I
F D=0 THEN 760 ELSE 720
  710 IF LEFT$(B$,1)<>"W" THEN 900 ELSE 
RESTORE 800:FOR C=1 TO A:READ D:NEXT C:I
F D=0 THEN 760
  720 IF A=32 AND E(31)=A PRINT"The plan
t will not let you pass.":GOTO 150:ELSE 
IF A=42 AND E(23)=A PRINT"You are caught
 in the web.":GOTO 150
  730 IF A=44 AND E(43)=44 AND LEFT$(B$,
1)="S" PRINT"The serpent is blocking the
 exit.":GOTO 150:ELSE IF A=47 AND E(12)<
>56 AND LEFT$(B$,1)="S" PRINT"You cannot
 pass the flames.":GOTO 150
  740 IF A=49 AND E(36)<>56 AND LEFT$(B$
,1)="S" PRINT"The dragon will not move."
:GOTO 150:ELSE IF A=17 AND E(46)=A AND (
LEFT$(B$,1)="N" OR LEFT$(B$,1)="E") PRIN
T"The exit is sealed.":GOTO 150
  750 IF E(15)=45 AND A=45 AND LEFT$(B$,
1)="W" OR E(15)=48 AND A=48 AND LEFT$(B$
,1)="N" OR A=50 AND (E(17)=0 OR E(18)=0 
OR E(19)=0) PRINT"You cannot pass the gh
ost.":GOTO 150:ELSE A=A+D:GOTO 150
  760 PRINT"No exit!":GOTO 150
  770 DATA 1,0,2,3,0,-3,3,-4,2,2,0,4,0,4
,0,5,5,0,-5,-5,0,0,7,7,7,-7,0,-8,0,0,4,0
,0,0,0,0,3,0,0,0,-4,3,-4,0,0,-3,-3,2,-2,
0,-2,0,0,0,1
  780 DATA 0,-1,3,4,-2,0,-3,0,0,-3,-2,-2
,0,5,5,-4,0,-4,7,8,-5,0,0,0,0,0,0,0,0,-7
,-7,-7,0,0,-4,0,4,0,4,-3,0,0,3,3,-3,0,2,
0,2,-2,0,0,0,1,0
  790 DATA 0,2,-1,0,0,0,0,0,-4,4,2,6,-3,
0,-4,7,-5,7,8,0,0,0,0,-7,0,7,0,6,0,6,0,5
,5,0,-6,0,0,4,-4,4,0,0,0,0,0,0,0,-3,0,0,
0,-2,0,0,0
  800 DATA 0,1,0,-2,4,0,0,0,0,3,4,0,-2,-
4,0,6,7,-6,0,0,0,0,-7,0,-7,0,-8,0,6,0,0,
0,-7,-6,4,-6,-5,-5,0,0,0,-4,0,-4,3,0,0,0
,0,2,0,0,0,0,0
  810 DATA GUN,WALLET,CONTAINER,LIT-CAND
LES,COFFIN,WINE-LABEL,CRUCIFIX,LASER-GUN
,SILVER-COIN,WOLVES,COMPUTER,BUCKET,SHIE
LD,JEWEL,GHOST,STAKE,SWORD,DAGGER,AXE,BR
OKEN-BONES,SKELETON-KEY,CHEMICALS,SPIDER
'S-WEB,CLUE,MUSIC,RECORDER,WRITING
  820 DATA GUARD,DEAD-GUARD,KEY,PLANT,CU
PBOARD,ROPE,DWARF,DOOR,SAD-DRAGON,DRACUL
A,MIRROR,ACID,GLUE,CLOCK,WEREWOLF,SERPEN
T,RUBBER-BOOTS,SWITCH,SEALED-EXITS,GARLI
C,VAMPIRE,MALLET,MEAT-CHOPPER
  830 DATA GET,DRO,KIL,REA,PLA,KIC,OPE,M
IX,EXA,WEA,EMP,PRE,BLA,TIE,LOW,CLI,CUT,L
IF,HAM,CHO
  840 DATA Cell,Corridor,W.End of corrid
or,E.End of corridor,Library,Cell,Dining
 room,Outside of a locked door,Study
  850 DATA S.End of main hall,Computer r
oom,Main hall,Living room,Werewolf's cha
mber,Candlelit room,N.End of main hall,C
hamber of suspense,Chamber of horror
  860 DATA Weapon room,Wine room,Music r
oom,Chamber of death,Room with a pool,Bu
rial chamber,Armour room,Torture chamber
,Skeleton chamber
  870 DATA Room with a pit,Room with sol
dier ants,Room with a clock,Room with a 
sarcophagus,Bright room,Workroom,Dracula
's bedroom,Room with cages,Kitchen
  880 DATA Room of mirrors,Laboratory,Se
rvants' quarters,Echo chamber,Electrc ge
nerator room,Room with a giant spider,Ch
amber of fear,Room with a serpent,Dull r
oom
  890 DATA Room with a clue,Room with a 
fire in it,Dim room,Room with a dragon,D
ark room,Treasure chamber,Room which is 
pitch black,Room with a hole,Room with a
 dwarf,Outside of castle
  900 M=0:N=0:D=0:IF LEFT$(B$,3)="QUI" T
HEN 1010
  910 RESTORE 830:FOR I=1 TO 20:READ C$:
IF LEFT$(B$,3)=C$ M=I
  920 NEXT I:IF M<>0 THEN 940
  930 PRINT"I do not understand you.":GO
TO 150
  940 RESTORE 810:D$=MID$(B$,3,4):FOR J=
1 TO 50:READ C$:C$=LEFT$(C$,3)
  950 FOR K=4 TO 10:IF LEFT$(D$,1)<>" " 
AND C$=MID$(D$,2,3) N=1
  960 IF J=1 AND LEFT$(D$,1)="-" K=10:GO
TO 980
  970 IF C$=MID$(D$,2,3) O=J:K=10:J=50 E
LSE D$=MID$(B$,K,4)
  980 NEXT K:NEXT J:IF O=0 PRINT"Pardon?
":GOTO 150
  990 IF N=1 PRINT"Learn to type."'CHR$1
30;
 1000 ON M GOTO 1050,1110,1150,1220,1280
,1320,1350,1430,1460,1510,1550,1590,1630
,1670,1720,1760,1810,1850,1890,1950
 1010 VDU 23;11,0;0;0;0,31,6,10:PRINT"Pr
ess space to start again":IF INKEY$(50)=
" " VDU 23,11,255;0;0;0:GOTO 20 ELSE VDU
 31,6,10:PRINT"                         
 ":IF INKEY$(50)=" " VDU 23;11,255;0;0;0
:GOTO 20 ELSE 1010
 1020 PRINT"I cannot do that.":GOTO 150
 1030 PRINT"O.K.":GOTO 150
 1040 PRINT"I am not carrying it.":GOTO 
150
 1050 IF O=5 OR O=10 OR O=11 OR O=15 OR 
O=20 OR O=23 OR O=24 OR O=25 OR O=27 OR 
O=28 OR O=31 OR O=32 OR O=34 OR O=36 OR 
O=37 OR O=39 AND E(3)<>0 OR O=41 OR O=42
 OR O=45 OR O=46 OR O=47 AND T=0 OR O=48
 OR O=16 AND E(48)=34 THEN 1020
 1060 IF F=6 PRINT"I am carrying too muc
h.":GOTO 150
 1070 IF E(O)=A E(O)=0:GOTO 1030
 1080 PRINT"I do not see it here.":GOTO 
150
 1090 PRINT"I do not see them here.":GOT
O 150
 1100 PRINT"I am not carrying them.":GOT
O 150
 1110 IF E(O)<>0 AND E(O)<>-1 THEN 1040
 1120 IF H=6 OR H=5 AND O=3 AND E(39)=0 
PRINT"I do not see a place to put it.":G
OTO 150
 1130 IF O=3 AND E(39)=0 E(39)=A
 1140 E(O)=A:GOTO 1030
 1150 IF (O<>28 OR E(29)<>56) AND O<>10 
AND O<>15 THEN 1020
 1160 IF O=15 AND A=50 PRINT"I cannot do
 that.":GOTO 150
 1170 IF O=10 AND A<>35 OR E(O)=56 THEN 
1090
 1180 IF O=10 AND E(18)<>0 OR O=15 AND E
(17)<>0 PRINT"I have nothing to kill wit
h.":GOTO 150
 1190 IF A=45 AND O=15 E(O)=48:GOTO 1030
 1200 IF A=48 AND O=15 E(O)=50:GOTO 1030
 1210 E(O)=56:E(29)=1:GOTO 1030
 1220 IF O=27 AND A=6 PRINT"Escape befor
e Dracula kills you.":GOTO 150
 1230 IF O=24 AND A=46 PRINT" An exit fr
om this castle lies behind a"CHR$130"loc
ked door.":GOTO 150
 1240 GOTO 1020
 1250 IF O=6 AND E(O)<>0 THEN 1040
 1260 IF O=6 PRINT"It gives the formula:
- X*Y+Z-5=W/V":GOTO 150
 1270 GOTO 1020
 1280 IF O<>25 AND O<>26 THEN 1020
 1290 IF A<>21 AND A<>40 THEN 1080
 1300 IF A=40 PRINT" Wolves fear lit-can
dles,and laser-guns"CHR$130"can blast se
aled-doors.":GOTO 150
 1310 A=29:PRINT" You have been thrown t
hrough a door in"CHR$130"the west wall."
:GOTO 150
 1320 IF O<>31 THEN 1020
 1330 IF A<>E(O) THEN 1080
 1340 E(O)=56:GOTO 1030
 1350 IF O<>35 AND O<>32 THEN 1020
 1360 IF A<>8 AND A<>52 THEN 1080
 1370 IF E(30)=0 AND A=8 PRINT"You have 
fallen through a trapdoor.":GOTO 1010
 1380 IF E(30)=0 AND E(33)<>56 PRINT"It 
is already open.":GOTO 150
 1390 IF E(30)=0 AND E(33)=56 E(33)=52:G
OTO 1030
 1400 IF E(21)=0 AND A=8 A=53:GOTO 1030
 1410 IF E(21)=0 PRINT"The key does not 
fit.":GOTO 150
 1420 PRINT"I have no key.":GOTO 150
 1430 IF O<>22 THEN 1020
 1440 IF E(O)<>0 THEN 1100
 1450 PRINT"With what formula?":GOTO 150
 1460 IF O<>12 AND O<>38 AND O<>41 THEN 
1020
 1470 IF O=41 AND A=30 R=RND(6):PRINT"It
 is ";R;" o'clock.":GOTO 150
 1480 IF E(O)<>0 THEN 1040
 1490 IF O=12 PRINT"There is water in th
e bucket.":GOTO 150
 1500 IF O=38 PRINT"You must escape with
in ";245-W;" moves.":GOTO 150
 1510 IF O<>44 THEN 1020
 1520 IF E(O)<>0 AND E(O)<>-1 THEN 1100
 1530 IF E(O)=-1 PRINT"I am already wear
ing them."':GOTO 150
 1540 E(O)=-1:GOTO 1030
 1550 IF O<>12 THEN 1020
 1560 IF E(O)<>0 THEN 1040
 1570 IF A<>47 PRINT"I see no place to e
mpty it.":GOTO 150
 1580 E(O)=56:PRINT" A passage has been 
cleared through the"CHR$130"flames.Your 
bucket has melted.":GOTO 150
 1590 IF O<>45 THEN 1020
 1600 IF A<>41 THEN 1080
 1610 PRINT"You have switched off the li
ghts."
 1620 PRINT CHR$130"Dracula has killed y
ou.":GOTO 1010
 1630 IF O<>46 THEN 1020
 1640 IFA<>17 OR E(46)=56 THEN 1090
 1650 IF E(8)<>0 PRINT"I have nothing to
 blast with.":GOTO 150
 1660 E(46)=56:GOTO 1030
 1670 IF O<>33 THEN 1020
 1680 IF E(O)<>0 THEN 1040
 1690 IF A<>53 PRINT"I see no place to a
ttach it to.":GOTO 150
 1700 IF E(37)<>56 PRINT"Dracula will no
t let you.":GOTO 150
 1710 S=1:PRINT"It is attached to a conv
enient post.":GOTO 150
 1720 IF O<>33 THEN 1020
 1730 IF A<>53 PRINT"I see no place to l
ower it to.":GOTO 150
 1740 IF S<>1 PRINT"It has fallen down t
he hole.":E(O)=56:GOTO 150
 1750 S=2:GOTO 1030
 1760 IF O<>33 OR A<>53 THEN 1020
 1770 IF S<>2 PRINT"You have fallen down
 the hole.":GOTO 1010
 1780 A=54:GOTO 150
 1790 W=245-W:IF W>X X=W
 1800 PRINT"Score=";W;"   Best Score=";X
:GOTO 1010
 1810 IF O<>47 THEN 1020
 1820 IF E(19)<>0 PRINT"I have nothing t
o cut with.":GOTO 150
 1830 IF A<>46 OR T=1 PRINT"I see nothin
g to cut.":GOTO 150
 1840 T=1:GOTO 1030
 1850 IF O<>5 THEN 1020
 1860 IF A<.34 THEN 1080
 1870 IF H=6 OR E(48)<>56 PRINT"It will 
not move.":GOTO 150
 1880 E(48)=34:GOTO 1030
 1890 IF O<>16 THEN 1020
 1900 IF E(O)<>0 PRINT"I have no stake."
:GOTO 150
 1910 IF E(49)<>0 PRINT"I have no mallet
.":GOTO 150
 1920 IF H<>6 AND A=34 AND E(48)=A PRINT
"The vampire is dead,but your mallet has
"CHR$130"disappeared.":E(49)=53:E(16)=34
:U=1:GOTO 150
 1930 IF A=53 AND E(37)=A PRINT"You have
 killed Dracula.":E(37)=56:GOTO 150
 1940 GOTO 1020
 1950 IF O<>48 THEN 1020
 1960 IF E(50)<>0 PRINT"I have nothing t
o chop with.":GOTO 150
 1970 IF A<>34 OR E(O)<>34 THEN 1080
 1980 IF U=0 PRINT"It is still alive.":G
OTO 150
 1990 E(48)=57:GOTO 1030
 2000 DATA 5,9,13,15,34,20,39,43,31,35,1
1,36,25,51,45,33,19,19,19,27,56,38,42,46
,21,40,6,1,56,56,32,52,56,54,8,49,53,37,
18,56,30,14,44,29,41,17,46,56,3,36

The plan for the adventure, "Dracula's castle", is on the two previous pages. In each room, the objects present at the start of the game are given in brackets. If you are wondering why the rooms fifty-three, fifty-four, and fifty-five do not correspond to the method of numbering rooms, this is because when I oringally wrote the adventure, I had not fully considered these rooms, and so when I did think of them, they were tagged on at the end. The room numbers were not changed, since "A" is set equal to fifty- three on opening the locked door with the right key, instead of being added to a value in the variable "D".

DOCUMENTATION


   Since many of the variables used in this adventure have the same usages as in the model adventure, these variables will therefore have already been dealt with. Hence, only the variables "new" to this adventure will be explained below.

Numerical Variables


   1)   R -- This variable is used to determine the time on a clock in line 1470:

   1470   IF O=41 AND A=30 R=RND(6):PRINT"It is ";R;" o'clock.": GOTO 150

   If the player is in the "Room with a clock" and wishes to "EXAMINE" the "CLOCK", the time on the clock, "R", is given a random value between one and six. The time on this clock determines whether or not a "WEREWOLF" is asleep or awake, for if the time is before "4 o'cIock", and the player is in the "Werewolf's chamber", he or she will be killed:

   350   IF A=14 and R<4 PRINT CHR$l30"The werewolf has awoken and killed you.":GOTO 1010

   Note that in this adventure, the line to which the computer jumps to, for the player to press the space bar to restart the game, is line 1010, and not line 710, as in the model adventure.

   2)   S -- The status of a rope is controlled by this variable. If the rope is tied to a post, then "S" will equal one, and if in addition to being tied, the rope is also lowered down a hole, then "S" will equal two. If the rope is lowered without being tied, then it will fall down the hole, and if a player enters "CLIMB ROPE" without it being tied or lowered, the player will fall down the hole. The player must, of course, be in the right room.

   3)   T -- The value in "T" concerns whether a piece of "GARLIC" has been cut or not. If "T" equals zero, the "GARLIC" has still to be cut, and if "T" equals one, it has already been cut, and c£nnot be cut again. Once it has been cut, the advent rer can pick it up.

   4)   U -- The state of health of a certain vampire is controlled by this variable. If "U" equals zero, then "It is still alive". To kill it, the "STAKE" must be hammered into it, while the "MALLET" is being carried, as is usual when killing vampires; to render it harmless, you have to attack it with the "MEAT-CHOPPER" ("CHOP VAMPIRE") and "DROP" the "GARLIC" -- the value in "U" is incremented when the "STAKE" is used, and the action concerning this must be carried out first.

   5)   W -- This variable, as well as having the same use as in the model adventure, takes over from the variable "Y", in the role of containing the score obtained in the adventure. This is done in line l790:

   1790   W=245--W:IF W>X X=W

Dimensional Variables


   As in the model adventure, the object corresponding to each value of "E" is given:

   E(1)   -- GUN
   E(2)   -- WALLET
   E(3)   -- CONTAINER
   E(4)   -- LIT-CANDLES
   E(5)   -- COFFIN
   E(6)   -- WINE-LABEL
   E(7)   -- CRUCIFIX
   E(8)   -- LASER-GUN
   E(9)   -- SILVER-COIN
   E(10)   -- WOLVES
   E(11)   -- COMPUTER
   E(12)   -- BUCKET
   E(13)   -- SHIELD
   E(14)   -- JEWEL
   E(15)   -- GHOST
   E(16)   -- STAKE
   E(17)   -- SWORD
   E(18)   -- DAGGER
   E(19)   -- AXE
   E(20)   -- BROKEN-BONES
   E(21)   -- SKELETON-KEY
   E(22)   -- CHEMICALS
   E(23)   -- SPIDER'S WEB
   E(24)   -- CLUE
   E(25)   -- MUSIC
   E(26)   -- RECORDER
   E(27)   -- WRITING
   E(28)   -- GUARD
   E(29)   -- DEAD-GUARD
   E(30)   -- KEY
   E(31)   -- PLANT
   E(32)   -- CUPBOARD
   E(33)   -- ROPE
   E(34)   -- DWARF
   E(35)   -- DOOR
   E(36)   -- SAD-DRAGON
   E(37)   -- DRACULA
   E(38)   -- MIRROR
   E(39)   -- ACID
   E(40)   -- GLUE
   E(41)   -- CLOCK
   E(42)   -- WEREWOLF
   E(43)   -- SERPENT
   E(44)   -- RUBBER-BOOTS
   E(45)   -- SWITCH
   E(46)   -- SEALED-EXITS
   E(47)   -- GARLIC
   E(48)   -- V AMPIRE
   E(49)   -- MALLET
   E(50)   -- MEAT-CHOPPER

String Variables


   There is no difference between the string variables in this adventure and those in the model adventure ,and so there is no need to analyse any of them a second time.

Line Number Analysis


   Since I have already made a detailed analysis of an adventure, it is only necessary in this adventure to point out where the various routines are in the program:

   1)   

LINES 10-140

-- Initialisation of the variables and the printing out of the instructions if they are asked for.

   2)   

LINE 150

-- Resetting of the data pointer.

   3)   

LINES 160-170

-- Sound for the adventure.

   4)   

LINES 190-260

-- Bypassing of incrementing of the number of moves, when the player is in the last room.

   5)   

LINES 90-260

-- Incrementing of the number of moves, and the printing out of the relative nessages, depending on the number of moves made.

   6)   

LINES 270-460

-- Various deaths which occur depending on the room in which the adventurer is in, and what is being carried. There are also various other things that may happen concerning the position of the player: for example, if one is in the "Dining room" without the "GUN", then a robot will do some killing; on the other hand, if the "GUN" is carried, then the robot drops a key:--

   420   IF A=7 AND E(1)<>0 PRINT CHR$130"A robot has killed you.":GOTO 1010
   430   IF A=7 AND E(30)=56 E(30)=7:PRINT CHR$130"A robot,seeing your gun,dropped a key."

Line 430 does the killing, and line 440 sees that a key is dropped if the gun is possessed, and the key has not already been dropped.

   7)   

LINES 470-480

-- The finding of the name of the room in which the adventurer is in, and printing it on the screen.

   8)   

LINES 490-520

-- The printing out of the exits from the room in which the player is situated. These may be any configuration of "North", "South", "East", and "West".

   9)   

LINES 530-550

-- Working out of the objects in the room in which the adventurer is in, and printing them on the display. In this adventure there are fifty objects, and hence the "G" FOR/NEXT Loop starts with: FOR G = 1 TO 50.

   10)   

LINES 560-580

-- Prints out the objects that are presently being carried by the adventurer . Note that six objects are allowed in this adventure, compared with four in the model adventure, because of the difference in size -- the variable "H" is for the objects in the room, and is checked for equalling six, and not four, in line 550 the variable "F", for the objects carried, is checked in line 580.

   11)   

LINES 500-640

-- Creation of the display for the input, as well as the inputting of the commands and objects into B$. Line 610 checks for the player being in the last room, and removes the "SILVER-COIN" from the scene as a result of this, as a payment to the dwarf for passing it. Line 620 checks for the player being in the "Computer room" -- the player is only allowed to enter a command if "Y" is the reply to the question asked. Line 640 sets the display for the replies to the command and object.

   12)   

LINES 650-670

-- Error trapping for commands which may otherwise be considered as requests for movement. Movements which are not allowed under the conditions are also trapped here.

   13)   

LINES 680-710

-- Movement routines for movement "North", "South", "East", and "West", and the storage of the difference between room numbers in the variable "D".

   14)   LINES 720-750 -- Additional confinement of movement by the player under certain conditions. Line 750 ends by adding "D" to "A" if the player is allowed to move freely.

   15)   

LINE 760

-- If "D" equals zero then there is no exit in the chosen direction, and the computer jumps to this line.

   16)   

LINES 770-800

-- Data for movement in each of the four possible directions which the adventurer may attempt to move in.

   17)   

LINES 810-820

-- Data for the names of all the fifty objects used in the adventure.

   18)   

LINE 830

-- Data for the commands which the player may try using when playing the game.

   19)   

LINES 840-890

-- Data for all the fifty-five room names, the layout of which may be seen in the adventure plan.

   20)   

LINE 900

-- Definition of the three variables "M", "N", and "O", along with the allowance for the adventurer to "QUIT" if his/her situation is hopeless.

   21)   

LINES 910-920

-- Working out of the command entered, and the storing of its number in "M".

   22)   

LINE 930

-- If the command is not recognised, then "I do not understand you" is printed out.

   23)   

LINES 940-980

-- Finding out of what the object to the command Is, and storing its number in "O". If whatever is entered is not recognised, then "Pardon?" will be printed out. In line 96{is a point which must be mentioned, but so that it is taken care of properly, it is dealt with in "Journey to freedom", which has better examples of this point.

   24)   

LINE 990

-- If a space has been missed out between the command and the object, then "N" will equal one, and "Learn to type" will be printed by this line.

   25)   

LINE 1000

-- List of line numbers where the computer may jump to depending on the value of "M".

   26)   

LINE 1010

-- Line which deals with the player starting again.

   27)   

LINES 1020-1040

-- Three quite commonly used messages may be printed by these lines depending on which line number is after "GOTO".

   28)   

LINES 1050-1070

-- Routine which corresponds to the command "GET". Line 1050 is an example of something which may work alright in theory, but not always in practice, for the movable objects are not distinctly separated from those which may not be moved. This is because when one works on adventures, all the objects and what happens to them, have not been clearly thought of, and so the moveable objects are often mixed up with those which may not be moved -- this means that each object which may not be moved has to be accounted for and be prevented from being picked up. This may be one of the more obvious things that does not work quite as planned.

   29)   

LINES 1080-1100

-- Three other commonly used messages are dealt with here.

   30)   

LINES 1110-1140

-- The routine for dropping objects in rooms is dealt with in these lines.

   31)   

LINES 1150-1210

-- This is the routine which allows the adventurer to try and kill things.

   32)   

LINES 1220-1270

-- The routine for "READ".

   33)   

LINES 1280-1310

-- The routine for "PLAY".

   34)   

LINES 1320-1340

-- This concerns the command "KICK".

   35)   

LINES 1350-1420

-- "OPEN" is dealt with here.

   36)   

LINES 1430-1450

-- "MIX" is the command that these lines deal with.

   37)   

LINES 1460-1500

-- Routine for examining objects.

   38)   

LINES 1510-1540

-- Lines which enable the player to "WEAR" something.

   39)   

LINES 1550-1580

-- The routine for the command "EMPTY".

   40)   

LINES 1590-1620

-- This allows the player to "PRESS" something.

   41)   

LINES 1630-1660

-- The command dealt with here is "BLAST".

   42)   

LINES 1670-1710

-- These lines are for the command "TIE".

   43)   

LINES 1720-1750

-- "LOWER" is dealt with within these lines.

   44)   

LINES 1760-1800

-- The routine which allows the player to "CLIMB".

   45)   

LINES 1810-1840

-- Enables the player to "CUT" something.

   46)   

LINES 1850-1880

-- The routine for lifting something (not the same as "GET").

   47)   

LINES 1890-1940

-- These lines concern the hammering of something.

   48)   

LINES 1950-1990

-- The routine for the last command, which is "CHOP".

   49)   LINE 2000 -- This line contains the data for the status of the objects at the start of the game.

   Since me computer memory is just about completely filled, if its limit is 16K, there is insufficent memory to comfortably add alternative commands. Although there is no problem with a 32K BBC Microcomputer, on the 16K version, to make the program run, it may be necessary to miss out unnecessary spaces. For example, line 400 would be changed from:

   400   IF A=35 AND E(10)=A PRINT CHR$130"Your lit-candles frighten the wolves."

to:

   400   IFA=35ANDE(10)=A PRINTCHR$130"Your lit-candles frighten the wolves."

   Note that the space is kept in between "E(10)=A" and "PRINT . . .", since the computer would otherwise think that "APRINT . . ." is a variable, and come up with the error message "No such variable". Repeated over a number of lines, this will save sufficient memory for the program to run on a 16K BBC Micro.

   If you have another micro and you find that there is not enough memory left within your 16K (assuming that your micro has 16K), then you will probably require to delete pieces of information. The instructions are optional although preferable, but they may be deleted to save memory -- they are not essential for the program to run smoothly; likewise, the sound routine can also be deleted. If there is still insufficient memory, then the "PRINT" statements should be pruned to the bare essentials. If further memory saving is required then the user will have to study the listing and the documentation, and delete routines, which, to them, seem the least significant to the running . of the program, until it fits within the memory. For instance, in my original version of this program for the ZX80, I did not include the necessity to kill the vampire in the coffin.

   When playing this larger adventure, you may notice that there is a difference in speed. This is because, with the increase in size, the computer has more things to check, and hence will take longer to come to its decisions.

   Although it is preferable to have the listing and structure of the adventure as neat as possible, it often happens that complications arise, and the neatness suffers: this may occur through the laziness of the programmer -- a great deal of time may be required to iron out any problems in structuring an adventure, since when actually writing a program, it is hard to keep to the model version for that program; if your micro does not have the facility for renumbering the line numbers, then structural difficulties may also arise. However, the main objective when writing a program, is to make it look good on the screen, and the main benefits arising from a good structure are a slight increase in speed, and a saving in memory. In short, try and work as closely as possible to the structure of the model adventure, and if any difficulties arise, like, for example, having the moveable objects mixed with those objects which may not be moved -- this is not a pleasant thing to sort out in a program -- then attempt to fix it so that any player would not notice any obvious difference when playing the game.

   I have included the adventure "Dracula's castle" in the book, as it is the first one that I have written, and I have improved upon the standard to which it was origianlly written. My first adventures were basically written around a six by eight matrix of rooms, but in my more recent ones, I try to devise more irregular matrices.