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:
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