FRANCIS DRAKE ADVENTURE GAME


This by far and away the most ambitious, interesting and testing program in this book.

This is an authentic historical adventure game based on Francis Drake's circumnavigation of the world, from 1577 to 1580. As you travel in the footsteps of Elizabeth I's free-booting adventurers, you will encounter the same problems and challenges as Drake.

Drake sailed in search of the elusive North West Passage that would allow him access to the Pacific, and the galleons of the Spanish Empire. As history books will already have told you, he did not find the object of his quest, but he did find much more, and so will you as you sail into the Francis Adventure Game.

How to play

Because of the complexity of this adventure the program has been split into two parts. This is because of the limitations of memory, but it will also mean that you do not have to complete entering the program at one sitting. You will have to store both halves on the same side of the tape, if you are 'saving', and, obviously, in the correct order.

Allow a slight gap between the two programs.

Load and run the first program but leave the PLAY button depressed so that that the second program will run when loaded.

The first program displays the title and map which can be checked before proceeding.

The second program consists of the text. To test this half Key in MODE 1 : CLS press RETURN.

When the program has been loaded and RUN, you will hear the gentle lapping of waves against the shore.

On the map you will see your position marked by a white sailing ship, docked near the port of Lima.

Every time you use this game, the dangers and treasures will be located in different parts of the ocean, so do not think that you can predict your moves too easily. We didn't feel that it was fair, however, to move the rocks, reefs and Spanish galleons, so try and remember their
positions. It will help you considerably.

You must follow Drake's route by first travelling to the port known as New Albion and thence onward, past Java, to the bottom left hand corner of the map.
Your aim is to reach the bottom of the map with, at least, four times the amount of the cargo with which you began.

If you achieve this feat of daring then you will, naturally, be rewarded by the gift of a knighthood from your grateful, and avaricious, Queen.

You move using the ARROW cursor keys.

If you input wrong information, the cursor will return to the left hand side of the screen and wait for accurate information. Your screen will then be cleared of your previous false data input.

At intervals you will be told the situation at sea and asked which action you would like to take, from the choices shown.

Remember to consider your options carefully as to the amounts of cargo, supplies, cannon balls and crew conditions.

Damage rating is based on a 1 to 10 scale. If you are damaged to the level of 10 then I'm afraid it's into the sea for you, as the Golden Hind settles gently below your feet.

Do your best as the present Government is emptying the coffers more quickly than you are filling them.

Hints and changes you can make

One of the problems of displaying a map on the screen, is how to reduce the memory required and the number of lines needed to describe the map. This is done by defining a string array M$, with the number of elements being equal to the number of rows on the map. Standard shapes are then defined using VDU 23. The shapes are as shown below:


Each row of the map is assigned to an element of M$ using the above shapes, and zero (to represent blanks). Each shape is described as a single digit by subtracting 224 from its shape number. This is displayed using CHR$ (224 + (shape number -224)).

If you find the adventure too easy, then reduce the cargo (CA), supplies (SU), crew (CR) and/or cannon balls (BA) that you start with. They are on line 410. If you find that knighthood escapes you, then reduce the 400 in line 480.



   10 REM FRANCIS DRAKE ADVENTURE GAME
   20 REM COPYRIGHT (C) G.LUDINSKI 1983
   30 MODE5:VDU23;8202;0;0;0;
   40 PROC_TITLE
   50 MODE1:VDU23;8202;0;0;0;
   60 DIM M$(17)
   70 VDU19,1,4;0;19,2,2;0;
   80 COLOUR129:COLOUR2
   90 CLS
  100 GOTO170
  110 DEFFNB(N$)
  120 TF=0
  130 FOR L=0 TO 7
  140   TF=TF+(2^L)*VAL(MID$(N$,8-L,1))
  150 NEXTL
  160 =TF
  170 VDU23,225,255,255,255,255,0,0,0,0
  180 VDU23,226,0,0,0,0,255,255,255,255
  190 B1=FNB("11110000"):VDU 23,227,B1,B
1,B1,B1,B1,B1,B1,B1
  200 B1=FNB("00001111"):VDU 23,228,B1,B
1,B1,B1,B1,B1,B1,B1
  210 Z1=FNB("11111110");Z2=FNB("1111110
0"):Z3=FNB("11111000"):Z4=FNB("11110000"
):Z5=FNB("11100000"):Z6=FNB("11000000"):
Z7=FNB("100000000")
  220 L1=FNB("01111111"):L2=FNB("0011111
1"):L3=FNB("00011111"):L4=FNB("00001111"
):L5=FNB("00000111"):L6=FNB("00000011"):
L7=FNB("00000001")
  230 VDU 23,229,255,Z1,Z2,Z3,Z4,Z5,Z6,Z
7
  240 VDU 23,230,L7,L6,L5,L4,L3,L2,L1,25
5
  250 VDU 23,233,255,255,255,255,255,255
,255,255
  260 VDU 23,232,Z7,Z6,Z5,Z4,Z3,Z2,Z1,25
5
  280  M$(1)=" 9999993045000000799999999
99000 "
  290  M$(2)=" 9999993000000000079999999
95000 "
  300  M$(3)=" 9999993000000000009999517
30000 "
  310  M$(4)=" 9999950000000000007799000
30000 "
  320  M$(5)=" 7995000000000000000099000
00000 "
  330  M$(6)=" 0998003000000000000079290
00000 "
  340  M$(7)=" 0479000000000000000001192
00000 "
  350  M$(8)=" 0480000200000000000000007
02220 "
  360  M$(9)=" 0870060000000000000000000
19999 "
  370 M$(10)=" 0780690200000000000000000
04999 "
  380 M$(11)=" 0070990308220000000000000
69999 "
  390 M$(12)=" 0002200000798100000000000
49999 "
  400 M$(13)=" 0000000100000000000000000
09999 "
  410 M$(14)=" 0000000069080000000000000
04999 "
  420 M$(15)=" 0000006999890000000000000
00999 "
  430 M$(16)=" 0000069999998000000000000
00099 "
  440 COLOUR129:COLOUR2:PRINT:FOR J=1 TO
 16:PRINT"  ";CHR$(64+J);"  ";:FOR I=2 T
O 31:P=VAL(MID$(M$(J),I,1)):IF P=0 THEN 
PRINT" ";:GOTO460
  450     PRINTCHR$(127+P);
  460   NEXT
  470   PRINT
  480 NEXT
  490 COLOUR130:COLOUR0:PRINTTAB(22,1)".
New Albion":COLOUR129:PRINTTAB(28,15)"Li
ma";:COLOUR130:PRINT".":COLOUR129:PRINTT
AB(5,13)"Java":GCOL0,3:MOVE160,992:DRAW1
120,992:DRAW1120,480:DRAW160,480:DRAW160
,992
  500 COLOUR129:COLOUR3
  510 PRINTTAB(5,17)"          1        
 2         "
  520 PRINTTAB(5,18)"0123456789012345678
90123456789"
  530 PRINT:REMP."Leave the play button 
depressed"
  540 CHAIN"DRAKE2"
  550 END
  560 DEFPROC_TITLE
  570 COLOUR129:COLOUR3:CLS
  580 FORI=1TO14:PRINT:NEXTI
  590 PRINT"   FRANCIS DRAKE":PRINT:PRIN
T"   ADVENTURE GAME"
  600 FORI=1TO12:PRINT:NEXT
  610 COLOUR2
  620 PRINT"Copyright (C)":PRINT"  G.Lud
inski 1983";
  630 FORI=1TO3:SOUND0,-15,70,10:SOUND0,
-15,100,20:SOUND0,-10,70,20:SOUND0,-5,50
,20:SOUND0,-2,40,20:NEXT
  640 ENDPROC






FRANCIS DRAKE ADVENTURE GAME






   10  REM FRANCIS DRAKE ADVENTURE GAME
   20  REM COPYRIGHT (C) G.LUDINSKI 1983
   30  DIM M$(17)
   40  COLOUR129:COLOUR2
   50  AL=0
   60  GOTO130
   70  DEFFNB(N$)
   80  TF=0
   90  FOR L=0 TO 7
  100   TF=TF+(2^L)*VAL(MID$(N$,8-L,1))
  110  NEXTL
  120  =TF
  130  VDU23,128,16,90,91,82,87,254,126,
62
  140  PROC_B
  150  SH$=CHR$(128)
  160 LA$=CHR$(136):RA$=CHR$(137):DA$=CH
R$(138):UA$=CHR$(139)
  170  M$(1)=" 9999993045000000799999999
99000 "
  180  M$(2)=" 9999993000000000079999999
95000 "
  190  M$(3)=" 9999993000000000009999517
30000 "
  200  M$(4)=" 9999950000000000007799000
30000 "
  210  M$(5)=" 7995000000000000000099000
00000 "
  220  M$(6)=" 0998003000000000000079290
00000 "
  230  M$(7)=" 0479000000000000000001192
00000 "
  240  M$(8)=" 0480000200000000000000007
02220 "
  250  M$(9)=" 0870060000000000000000000
19999 "
  260 M$(10)=" 0780690200000000000000000
04999 "
  270 M$(11)=" 0070990308220000000000000
69999 "
  280 M$(12)=" 0002200000798100000000000
49999 "
  290 M$(13)=" 0000000100000000000000000
09999 "
  300 M$(14)=" 0000000069080000000000000
04999 "
  310 M$(15)=" 0000006999890000000000000
EEEEE "
  320 M$(16)=" 0000069999998000000000000
EEEEE "
  330 FOR Y=1 TO 16
  340   FOR X=2 TO 31
  350     C$=MID$(M$(Y),X,1)
  360     IF C$="9" THEN GOTO400
  370     IF C$="0" THEN IS=INT(7*RND(1)
):PROC_ISERT:GOTO400
  380     IF C$="E" THEN IS=4:PROC_ISERT
:GOTO400
  390     IF (X > 4 AND X < 15 AND Y > 7
 AND Y < 14) THEN IS=INT(2*RND(1)+7):PRO
C_ISERT ELSE IS=10:PROC_ISERT
  400   NEXT:NEXT
  410 CA=100:SU=100:CR=85:BA=100:DA=0:WK
=1
  420 EN=0
  430 X=29:Y=16:X1=29:Y1=16
  440 IF WK=1 THEN COLOUR129:COLOUR3:PRI
NTTAB(X+4,Y);SH$;CHR$(8);
  450 *FX 4,1
  460 PRINTTAB(0,20)"Week Cargo Supplies
 Crew Cannon Damage                     
      balls"
  470 PRINTTAB(0,23);STRING$(39," ");
  480 IF X=1 AND Y=16 THEN PRINTTAB(0,25
)"You have survived the unknown, and now
  know you are the first commander of a 
  fleet to sail around the world.":IF CA
 >= 400 THEN PRINT"Arise Sir Francis":GO
TO 1390
  490 IF X=1 AND Y=16 THEN EN=1
  500 IF (X=17 AND Y=1) OR (X=18 AND Y=2
) OR (X=19 AND Y=4) THEN AL=1
  510 IF X < 15 AND AL=0 THEN PROC_B:PRI
NTTAB(0,25)"Go back to New Albion"
  520 IF SU <=0 THEN PROC_B:PRINTTAB(0,2
5)"Your supplies have been used up so yo
ur crew mutinies, and kills you.":SU=0:E
N=1
  530 IF CR <=0 THEN PROC_B:PRINTTAB(0,2
5)"Your crew have all been killed in bat
tleor have died of scurvy, typhus or    
   dysentery. You're stranded without th
em.":CR=0:EN=1
  540 IF DA > 10 THEN PROC_B:PRINTTAB(0,
25)"Your ship has filled with water and"
'"sunk.":EN=1
  550 IF BA < 0 THEN BA=0
  560 IF EN=1 THEN GOTO 1390
  570 PRINTTAB(0,23);WK;TAB(6,23);CA;TAB
(12,23);SU;TAB(21,23);CR;TAB(26,23);CA;T
AB(33,23);DA
  580 I$=GET$
  590 PROC_B
  600 IF (X=1 AND I$=LA$) OR (X=30 AND I
$=RA$) OR (Y=1 AND I$=UA$) OR (Y=16 AND 
I$=DA$) THEN GOTO 580
  610 IF I$=LA$ AND MID$(M$(Y),X-1,1) <>
 "0" AND MID$(M$(Y),X-1,1) <> "9" AND MI
D$(M$(Y),X,1) <> "2" THEN X=X-1
  620 IF I$=RA$ AND (MID$(M$(Y),X+1,1) <
> "2" AND MID$(M$(Y),X+1,1) <> "9" AND M
ID$(M$(Y),X,1) <> "0") THEN X=X+1
  630 IF I$=DA$ AND (MID$(M$(Y+1),X,1) <
> "3" AND MID$(M$(Y+1),X,1) <> "9" AND M
ID$(M$(Y),X,1) <> "1") THEN Y=Y+1
  640 IF I$=UA$ AND (MID$(M$(Y-1),X,1) <
> "1" AND MID$(M$(Y-1),X,1) <> "9" AND M
ID$(M$(Y),X,1) <> "3") THEN Y=Y-1
  650 WK=WK+1
  660 IF DA <> 0 THEN DA=DA+1
  670 SU=SU-1
  680 PRINTTAB(X1+4,Y1)".";
  690 COLOUR3:PRINTTAB(X+4,Y);SH$;CHR$(8
);
  700 IF X=X1 AND Y=Y1 AND WK <> 1 THEN 
SOUND 0,-15,53,10:PROC_REEF:GOTO770
  710 IF MID$(M$(Y),X,1)="A" AND DA <> 0
 THEN DA=0:PROC_B:PRINTTAB(0,25)"You hav
e arrived at a port so you can   now get
 your ship repaired.":GOTO770
  720 IF MID$(M$(Y),X,1)="4" THEN PROC_B
:GOTO770
  730 IF MID$(M$(Y),X,1)="5" THEN PROC_N
AMSHIP
  740 IF MID$(M$(Y),X,1)="6" THEN PROC_S
HIP
  750 IF MID$(M$(Y),X,1)="7" THEN PROC_T
RADE
  760 IF MID$(M$(Y),X,1)="8" THEN PROC_H
OSTILE
  770 X1=X:Y1=Y
  780 GOTO460
  790 DEFPROC_REEF
  800 W=INT(2*RND(1))
  810 IF X < 15 THEN RR$="reef" ELSE RR$
="rock"
  820 PROC_B
  830 IF W=0 THEN PRINTTAB(0,25)"There i
s a ";RR$;" ahead. Turn around.":GOTO900
  840 PRINTTAB(0,25)"You have run agroun
d on a ";RR$;"."'"Are you going to throw
 cargo and guns   overboard, or put out 
an anchor to"'"windward";
  850 INPUT R$:IF INSTR(R$+"      ","OVE
RBOARD") <> 0 OR INSTR(R$+"      ","over
board") <> 0 THEN R$="OVERBOARD":GOTO880
  860 IF INSTR(R$+"      ","ANCHOR") <> 
0 OR INSTR(R$+"      ","anchor") <> 0 TH
EN R$="ANCHOR":GOTO880
  870 VDU 11:GOTO850
  880 IF R$="OVERBOARD" THEN CA=CA-RND(2
0):GOTO900
  890 W2=INT(2*RND(1)):PROC_B:IF W2=0 TH
EN PRINTTAB(0,25)"You have broken free w
ithout any"'"significant damage." ELSE P
RINTTAB(0,25)"Your ship, the Golden Hind
, is holed.   Return to dry land at once
 or it will   sink.":DA=DA+1
  900 ENDPROC
  910 DEFPROC_B
  920 PRINTTAB(0,25)SPC(238)
  930 ENDPROC
  940 DEFPROC_NAMSHIP
  950 PROC_B
  960 IF RND(2)=1 THEN PRINTTAB(0,25)"Yo
u see a Spanish galleon, the Caca-"'"fue
go. Are you going to attack it or "'"ign
ore it";:GOTO980
  970 PRINTTAB(0,25)"You see a Spanish g
alleon, the Esprito  Santo. Are you goin
g to attack it or"'"ignore it";
  980 INPUT R$:IF INSTR(R$+"      ","ATT
ACK") <> 0 OR INSTR(R$+"      ","attack"
) <> 0 THEN R$="ATTACK":GOTO1010
  990 IF INSTR(R$+"      ","IGNORE") <> 
0 OR INSTR(R$+"      ","ignore") <> 0 TH
EN R$="IGNORE":GOTO1010
 1000 VDU11:GOTO980
 1010 IF R$="ATTACK" AND CA <= 0 THEN PR
OC_B:PRINTTAB(0,25)"You draw alongside t
he galleon and then find you have no can
non balls left so   the Spanish win the 
battle and leave youto die.":EN=1:GOTO10
30
 1020 IF R$="ATTACK" THEN PROC_B:PRINTTA
B(0,25)"You fight a fierce battle and fi
nally   take command of the galleon and 
transferits cargo to the hold of the Gol
den"'"Hind.":CA=CA+RND(20):BA=BA-RND(20)
:FORD=1TO100:NEXTD
 1030 ENDPROC
 1040 DEFPROC_SHIP
 1050 PROC_B
 1060 PRINTTAB(0,25)"You see a Spanish g
alleon. Are you goingto attack it or ign
ore it";
 1070 INPUT R$:IF INSTR(R$+"      ","ATT
ACK") <> 0 OR INSTR(R$+"      ","attack"
) <> 0 THEN R$="ATTACK":GOTO1100
 1080 IF INSTR(R$+"      ","IGNORE") <> 
0 OR INSTR(R$+"      ","ignore") <> 0 TH
EN R$="IGNORE":GOTO1100
 1090 VDU11:GOTO1070
 1100 IF R$="IGNORE" THEN ENDPROC
 1110 PROC_B
 1120 PRINTTAB(0,25)"Are you going to fi
re your cannons at   the galleon, or set
 fire to some old    ships and let them 
drift towards it, or sneak up alongside 
it and board it?"
 1130 INPUTR$:IF INSTR(R$+"      ","CANN
ON") <> 0 OR INSTR(R$+"      ","cannon")
 <> 0 THEN R$="CANNONS":GOTO1170
 1140 IF INSTR(R$+"        ","SET FIRE")
 <> 0 OR INSTR(R$+"        ","set fire")
 THEN R$="SET FIRE":GOTO1170
 1150 IF INSTR(R$+"     ","SNEAK") <> 0 
OR INSTR(R$+"     ","sneak") THEN R$="SN
EAK":GOTO1170
 1160 VDU11:GOTO1130
 1170 PROC_B
 1180 IF R$ <> "CANNONS" THEN GOTO1210
 1190 IF RND(2)=1 THEN PRINTTAB(0,25)"Yo
ur ship gets holed and some of your   cr
ew are shot. Return to dry land at"'"onc
e.":DA=DA+1:BA=BA-RND(20):CR=CR-RND(10):
GOTO1290
 1200 PRINTTAB(0,25)"As your ship is sma
ller and lower than  the galleon, you ma
nage to put it out ofaction and board it
 without incurring   any damage to your 
ship.":CA=CA+RND(20):SU=SU+RND(20):BA=BA
+RND(20):GOTO1290
 1210 IF R$ <> "SET FIRE" THEN GOTO 1250
 1220 PROC_B
 1230 IF RND(2)=1 THEN PRINTTAB(0,25)"Th
e wind changes direction and the"'"burni
ng ships drift towards the Golden  Hind,
 setting the mizzen mast alight.   Retur
n to dry land at once.":DA=DA+1:GOTO1290
 1240 PRINTTAB(0,25)"The burning ships d
rift towards the"'"galleon, setting it a
light. The captain surrenders and you tr
ansfer his cargo toyour hold.":CA=CA+RND
(20):SU=SU+RND(20):BA=BA+RND(20):GOTO129
0
 1250 IF R$ <> "SNEAK" THEN GOTO1290
 1260 PROC_B
 1270 IF RND(2)=1 THEN PRINTTAB(0,25)"Th
ey see you approaching and, realising yo
u are English, they open fire, shoot- in
g some of your crew and damaging your bo
at. Return to port at once.":BA=BA-RND(2
0):DA=DA+1:CR=CR-RND(10):GOTO1290
 1280 PRINTTAB(0,25)"They assume you are
 Spanish as English  ships have never be
en this far before,  so you manage to bo
ard the galleon and  capture it and its 
rich cargo.":CA=CA+RND(20):SU=SU+RND(20)
:BA=BA+RND(20)
 1290 ENDPROC
 1300 DEFPROC_TRADE
 1310 PROC_B:PRINTTAB(0,25)"You buy clov
es cheaply from the         islanders.":
CA=CA+RND(20):SU=SU+RND(20)
 1320 ENDPROC
 1330 DEFPROC_HOSTILE
 1340 PROC_B:PRINTTAB(0,25)"Hostile isla
nders pelt you with stones.":CR=CR-RND(2
0)
 1350 ENDPROC
 1360 DEFPROC_ISERT
 1370 IF IS <> 10 THEN M$(Y)=LEFT$(M$(Y)
,X-1)+STR$(IS)+RIGHT$(M$(Y),31-X) ELSE M
$(Y)=LEFT$(M$(Y),X-1)+"A"+RIGHT$(M$(Y),3
1-X)
 1380 ENDPROC
 1390 *FX4,0
 1400 END