10 REM           FISHING
20 REM     By Michael Kelsall
30 REM   Adapted by Ken Goodman
40 REM(c)Computing with the Amstrad
45 REM -------- CPC  ONLY ---------
50 SYMBOL AFTER 230
60 MODE 1
70 DIM name$(7),weight(7)
80 GOSUB 200:REM Define characters
90 GOSUB 490:REM Title page
100 GOSUB 840:REM Initialise
110 GOSUB 990:REM Input data
120 GOSUB 1170:REM Set penalties
130 GOSUB 1260:REM Screen graphics
140 GOSUB 1470:REM Game loop
150 GOSUB 2360:REM End of game
160 INK 0,0:INK 1,26:INK 2,26,0:INK 3,24:PAPER 0:BORDER 8:CLS
170 GOSUB 2410:REM Weigh-in
180 RUN
190 REM define characters
200 RESTORE 240:FOR i=232 TO 255
210 READ d1,d2,d3,d4,d5,d6,d7,d8
220 SYMBOL i,d1,d2,d3,d4,d5,d6,d7,d8
230 NEXT i:RETURN
240 DATA 255,255,255,255,255,255,255,126
250 DATA 204,51,204,51,204,51,204,51
260 DATA 51,204,51,204,51,204,51,204
270 DATA 4,4,66,66,34,33,33,33
280 DATA 0,8,20,20,17,17,34,34
290 DATA 33,145,149,149,85,80,66,2
300 DATA 34,40,68,68,84,80,16,16
310 DATA 8,8,8,28,28,0,0,0
320 DATA 0,8,8,8,28,0,0,0
330 DATA 248,248,232,168,136,254,14,7
340 DATA 0,0,0,0,0,0,0,3
350 DATA 3,3,4,11,14,51,196,8
360 DATA 15,55,207,62,252,212,68,206
370 DATA 12,48,192,0,0,0,0,0
380 DATA 17,34,58,59,59,123,247,15
390 DATA 26,50,116,212,204,202,145,16
400 DATA 0,0,0,0,0,0,126,129
410 DATA 0,0,1,0,0,1,1,131
420 DATA 99,27,6,7,7,3,4,8
430 DATA 7,7,127,254,228,92,68,206
440 DATA 0,0,1,0,0,1,1,3
450 DATA 0,0,0,3,12,48,192,0
460 DATA 20,54,126,126,60,24,60,126
470 DATA 20,54,62,28,8,62,0,0
480 REM Title page
490 INK 0,9:INK 1,26:INK 2,19:INK 3,2:PAPER 0:BORDER 9:CLS
500 MOVE 63,80:DRAWR 482,0,1:DRAWR 0,225:DRAWR -482,0:DRAWR 0,-225
510 MOVE 61,79:DRAWR 486,0,1:DRAWR 0,227:DRAWR -486,0:DRAWR 0,-227
520 MOVE 59,76:DRAWR 490,0,1:DRAWR 0,231:DRAWR -490,0:DRAWR 0,-231
530 WINDOW #1,5,34,7,12:PAPER #1,2:CLS#1
540 WINDOW #2,5,34,12,20:PAPER #2,3:CLS#2
550 TAG:PLOT -10,-10,2:FOR i=65 TO 529 STEP 16
560 MOVE i,236+INT(RND*8)-6:PRINT CHR$(232);:NEXT:TAGOFF
570 PEN 1:LOCATE 7,2:PRINT"U N I T E D  K I N G D O M"
580 PEN 0:PAPER 3:FOR i=8 TO 18 STEP 2:LOCATE i,2:PRINT CHR$(207):NEXT
590 FOR i=19 TO 31 STEP 2:LOCATE i,2:PRINT CHR$(207):NEXT
600 PEN 1:PAPER 0:LOCATE 6,4:PRINT"F I S H I N G  C O N T E S T"
610 PEN 0:PAPER 3:FOR i=7 TO 19 STEP 2:LOCATE i,4:PRINT CHR$(207):NEXT
620 FOR i=20 TO 32 STEP 2:LOCATE i,4:PRINT CHR$(207):NEXT
630 PEN 0:PAPER 2:LOCATE 26,9:PRINT CHR$(252)CHR$(241)
640 LOCATE 25,10:PRINT CHR$(242)CHR$(243)CHR$(244)
650 LOCATE 24,11:PRINT CHR$(253)CHR$(245)CHR$(246)CHR$(247)
660 rd$=CHR$(235)+CHR$(236)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(237)+CHR$(238)
670 PEN 0:LOCATE 22,10:PRINT rd$:PEN 2:PAPER 3:LOCATE 17,12:PRINT rd$:LOCATE 32,12:PRINT rd$
680 MOVE 368,226:DRAW 224,108,1
690 LOCATE 14,19:PRINT CHR$(239)
700 PEN 1:PAPER 0:LOCATE 1,22:PRINT"PLEASE TYPE YOUR NAME (up to 15 letters)"
710 WHILE INKEY$<>"":WEND
720 name$(1)=SPACE$(16):WHILE LEN(name$(1))>15
730 name$(1)=SPACE$(16)
740 LOCATE 1,24:PRINT CHR$(20);
750 LOCATE 1,24:INPUT name$(1)
760 WEND
770 LOCATE 1,22:PRINT CHR$(20)
780 LOCATE 2,22:PRINT"KEYS: A/Z = cast : Space/Fire = strike"
790 LOCATE 10,23:PRINT"Shift/Joystick to reel in"
800 LOCATE 5,24:PRINT"Press any key to start the match";
810 MOVE 8,72:DRAW 632,72:DRAW 632,8:DRAW 8,8:DRAW 8,72
820 CALL &BB18:RETURN
830 REM Initialise
840 RANDOMIZE TIME:KEY DEF 76,1,32
850 fishcaught=0:fw=0:xpo=INT(RND*26)+11:ypo1=14:ypo2=24:cast=0:e=0:flag=0:weather=INT(RND*3)+1:depth=INT(RND*20)+11:penalty=INT(RND*10)+1
860 RESTORE 870:FOR i=2 TO 7:READ n$:name$(i)=n$:weight(i)=INT(RND*75)+1:NEXT
870 DATA Michael Kelsall,Robert Kelsall,Shaun Wilson,Nigel Saunders,David Sturgess,Gary Gregory
880 IF weather =1 THEN weather$="Sunny.":recbait=7:rechook=15:rechookdepth=depth-1
890 IF weather=2 THEN weather$="Cloudy.":recbait=3:rechook=17:rechookdepth=depth-2
900 IF weather=3 THEN weather$="Raining.":recbait=2:rechook=14:rechookdepth=depth-3
910 flow=INT(RND*3)+1
920 IF flow=1 THEN flow$="fast.":recounces=4
930 IF flow=2 THEN flow$="steady.":recounces=3
940 IF flow=3 THEN flow$="slow.":recounces=2
950 ENV 1,1,10,1,1,0,2,10,-1,1
960 ENT 2,3,-5,1
970 SPEED INK 40,18:RETURN
980 REM Input data
990 INK 0,1:INK 1,8:INK 2,20:INK 3,19:CLS
1000 PRINT TAB(13)"FISHING LOG"
1010 LOCATE 7,4:PEN 2:PRINT"Weather:- "weather$
1020 LOCATE 7,5:INPUT "What hook size (10-25) ";i$:hooksize=VAL(i$)
1030 IF hooksize<10 OR hooksize>25 THEN LOCATE 32,5:PRINT CHR$(20):PRINT CHR$(7):GOTO 1020
1040 PEN 3:LOCATE 7,7:PRINT"Which bait: 1..Luncheon Meat"
1050 LOCATE 19,8:PRINT"2..Cheese":LOCATE 19,9:PRINT"3..Earthworms":LOCATE 19,10:PRINT"4..Bread"
1060 LOCATE 11,11:PRINT"Maggots 5..Bronze":LOCATE 19,12:PRINT"6..White"
1070 LOCATE 19,13:PRINT"7..Mixed":LOCATE 19,14:PRINT"8..Casters"
1080 PEN 1:LOCATE 11,16:INPUT "Press 1-8 for bait ";i$:bait=VAL(i$)
1090 IF bait<1 OR bait>8 THEN LOCATE 32,16:PRINT CHR$(20):PRINT CHR$(7):GOTO 1080
1100 PEN 2:LOCATE 3,18:PRINT"The water has a depth of"depth"metres."
1110 LOCATE 3,19:PRINT CHR$(20);:INPUT "What depth will you fish at ";i$:IF i$="" OR ASC(LEFT$(i$,1))<48 OR ASC(LEFT$(i$,1))>57 THEN 1110 ELSE hookdepth=VAL(i$)
1120 IF hookdepth>depth THEN 1110
1130 PEN 3:LOCATE 3,21:PRINT"The water is flowing "flow$:LOCATE 3,22:INPUT "What weight will you use (1-10) ";i$:ounces=VAL(i$)
1140 IF ounces<1 OR ounces>10 THEN LOCATE 37,22:PRINT CHR$(20):PRINT CHR$(7):GOTO 1130
1150 FOR dl=1 TO 1000:NEXT:RETURN
1160 REM Set the penalties
1170 IF hooksize<>rechook THEN penalty=penalty+2
1180 IF bait<>recbait THEN penalty=penalty+2
1190 IF hookdepth<>rechoohdepth THEN penalty=penalty+2
1200 IF ounces<>recounces THEN penalty=penalty+2
1210 RETURN
1220 REM Draw the fisherman
1230 PEN 2:PAPER 1:LOCATE xpo-1,7:PRINT CHR$(32)CHR$(32)CHR$(252)CHR$(241):LOCATE xpo-1,8:PRINT CHR$(32)CHR$(242)CHR$(243)CHR$(244):LOCATE xpo-1,9:PRINT CHR$(253)CHR$(245)CHR$(246)CHR$(247)
1240 RETURN
1250 REM Screen graphics
1260 MODE 1:INK 0,2:INK 1,22:INK 2,0:INK 3,26:PAPER 2:BORDER 0:CLS
1270 WINDOW #1,1,40,5,9:PAPER #1,1:CLS #1
1280 WINDOW #2,1,40,10,25:PAPER #2,0:CLS #2
1290 TAG:PLOT -10,-10,1:FOR i=1 TO 640 STEP 12
1300 MOVE i,266+INT(RND*8)-6:PRINT CHR$(232);:NEXT:TAGOFF
1310 REM FOR i=0 TO 144 STEP 48:MOVE i,310:DRAW i,334,2:MOVE i+2,310:DRAW i+2,334:next
1320 FOR i=8 TO 152 STEP 48:MOVE i,310:DRAW i,334,2:MOVE i+2,310:DRAW i+2,334:NEXT
1330 FOR o=208 TO 640 STEP 46:MOVE i,310:DRAW i,334:MOVE i+2,310:DRAW i+2,334:NEXT
1340 MOVE 0,334:DRAW 640,334:FOR j=326 TO 318 STEP -8
1350 MOVE 0,j:DRAW 152,j:MOVE 208,j:DRAW 640,j:NEXT
1360 MOVE 152,334:DRAW 208,310:n=330:FOR i=1 TO 4
1370 MOVE 152,n:DRAW 208,n:n=n-6:NEXT
1380 PEN 1:PAPER 0:FOR i=1 TO 5:READ p,q:LOCATE p,q:PRINT rd$:NEXT
1390 DATA 5,11,8,12,15,13,31,11,37,11
1400 PAPER 2:LOCATE 4,1:PRINT"United Kingdom Fishing Contest"
1410 PEN 3:LOCATE 2,2:PRINT"Peg No.: 1 - "name$(1)
1420 LOCATE 2,3:PRINT"Number of fish caught":LOCATE 2,4:PRINT"Weight of last fish (lb)"
1430 LOCATE 32,2:PRINT"Total":LOCATE 32,3:PRINT"weight":LOCATE 32,4:PRINT"0lb"
1440 LOCATE 24,3:PRINT"0":LOCATE 27,4:PRINT"0"
1450 RETURN
1460 REM Game loop
1470 t1=TIME/300
1480 PEN 2:PAPER 0
1490 LOCATE xpo-7,ypo1:PRINT" ":LOCATE xpo-7,ypo2:PRINT" "
1500 PEN 2:PAPER 1:IF cast=0 THEN LOCATE xpo-3,9:PRINT"   "
1510 PRINT CHR$(23)CHR$(1);
1520 IF e=1 AND flag=1 THEN MOVE (xpo-2)*16,254:DRAW (xpo-7)*16,186
1530 IF e=1 AND flag=2 THEN MOVE (xpo-2)*16,254:DRAW (xpo-7)*16,38
1540 PRINT CHR$(23)CHR$(0);:PEN 2
1550 e=0:IF cast=1 OR cast=2 THEN 1690
1560 LOCATE xpo,7:PRINT CHR$(248)CHR$(249)CHR$(241)
1570 LOCATE xpo,8:PRINT CHR$(32)CHR$(250)CHR$(251)
1580 LOCATE xpo,9:PRINT CHR$(32)CHR$(246)CHR$(247)
1590 WHILE cast=0
1600 t2=TIME/300:IF t2-t1>300 THEN 2340
1610 WHILE INKEY$<>"":WEND
1620 IF INKEY(69)>-1 THEN GOSUB 1230:FOR i=15 TO 1 STEP -1:SOUND 3,0,1,4,0,0,i:NEXT:FOR dl=1 TO 400:NEXT:SOUND 3,40,3,15,1,1:PEN 3:PAPER 0:LOCATE xpo-7,ypo1:PRINT CHR$(239):cast=1::PEN 2:PAPER 1
1630 IF INKEY(71)>-1 THEN GOSUB 1230:FOR i=15 TO 1 STEP -1:SOUND 3,0,1,4,0,0,i:NEXT:FOR dl=1 TO 400:NEXT:SOUND 3,40,3,15,1,1:PEN 3:PAPER 0:LOCATE xpo-7,ypo2:PRINT CHR$(239):cast=2:PEN 2:PAPER 1
1640 WEND
1650 PEN 3
1660 MOVE (xpo-2)*16,254
1670 IF cast=1 THEN DRAW (xpo-7)*16,186,3
1680 IF cast=2 THEN DRAW (xpo-7)*16,38,3
1690 fish=INT(RND*200)+1-INT(RND*penalty)+1
1700 IF INKEY(47)>-1 OR (JOY(0) AND 48)<>0 THEN flag=cast:e=1:cast=0:GOTO 1480
1710 t2=TIME/300:IF t2-t1>300 THEN 2340
1720 IF fish<>1 THEN 1690
1730 PEN 3:PAPER 0
1740 float=INT(RND*7)+1:WHILE float>0
1750 t2=TIME/300:IF t2-t1>300 THEN 2340
1760 IF cast=1 THEN LOCATE xpo-7,ypo1:PRINT CHR$(240)
1770 IF cast=2 THEN LOCATE xpo-7,ypo2:PRINT CHR$(240)
1780 zz$=INKEY$
1790 IF zz$=" " THEN flag=cast:e=1:cast=0:GOTO 1480
1800 FOR dl=1 TO 1600:NEXT
1810 IF cast=1 THEN LOCATE xpo-7,ypo1:PRINT CHR$(239)
1820 IF cast=2 THEN LOCATE xpo-7,ypo2:PRINT CHR$(239)
1830 zz$=INKEY$
1840 IF zz$=" " THEN flag=cast:e=1:cast=0:GOTO 1480
1850 FOR dl=1 TO 3200:NEXT
1860 float=float-1:WEND
1870 PAPER 0:LOCATE xpo-7,ypo1:PRINT CHR$(32):LOCATE xpo-7,ypo2:PRINT CHR$(32)
1880 PRINT CHR$(23)CHR$(1);
1890 strike=INT(RND*55)+5:WHILE strike>1
1900 t2=TIME/300:IF t2-t1>300 THEN 2340
1910 zz$=INKEY$
1920 IF zz$=" "AND cast=1 THEN MOVE (xpo-2)*16,254:DRAW (xpo-7)*16,186
1930 IF zz$=" " AND cast=2 THEN MOVE (xpo-2)*16,254:DRAW (xpo-7)*16,38
1940 PEN 2:PAPER 1
1950 IF zz$=" " THEN LOCATE xpo,7:PRINT CHR$(248)CHR$(249)CHR$(241):LOCATE xpo,8:PRINT CHR$(32)CHR$(250)CHR$(251):LOCATE xpo-1,9:PRINT CHR$(32)CHR$(32)CHR$(246)CHR$(247):flag=cast:cast=0:loop=0:GOTO 2020
1960 strike=strike-1:WEND
1970 PRINT CHR$(23)CHR$(0);
1980 PEN 3:PAPER 0:IF cast=1 THEN LOCATE xpo-7,ypo1:PRINT CHR$(239)
1990 IF cast=2 THEN LOCATE xpo-7,ypo2:PRINT CHR$(239)
2000 t2=TIME/300:IF t2-t1>300 THEN 2340
2010 GOTO 1500
2020 IF flag=1 THEN y=186:fw=INT(RND*3)+4
2030 IF flag=2 THEN y=38:fw=INT(RND*4)+5
2040 IF RND <0.015 THEN fw=40:FOR i=150 TO 10 STEP -5:SOUND 1,i,1,15:NEXT
2050 IF fw=40 THEN PEN 1:TAG:MOVE 240,112:PRINT"PIKE!";:FOR dl=1 TO 750:NEXT:MOVE 240,112:PRINT"PIKE!";:TAGOFF
2060 x=(xpo-6)*16:MOVE (xpo-1)*16,286:DRAW x,y
2070 WHILE y<254
2080 t2=TIME/300:IF t2-t1>300 THEN 2340
2090 MOVE (xpo-1)*16,286:DRAW x,y
2100 x=x+INT(RND*70)+1:x=x-INT(RND*70)+1:y=y+0.86-(fw*0.24)
2110 IF INKEY(21)=32 OR (JOY(0) AND 9)<>0 THEN ri=1 ELSE ri=0
2120 IF ri=1 AND kh=1 THEN 2180
2130 IF ri=0 THEN kh=0
2140 IF fw<40 THEN 2170
2150 IF hooksize>13 THEN 2170
2160 IF hooksize<13 AND ri THEN y=y+INT(RND*25)+14:kh=1
2170 IF ri THEN y=y+INT(RND*5)+8:SOUND 1,10,1,15,0,0,5:kh=1
2180 MOVE (xpo-1)*16,286:DRAW x,y
2190 IF RND>0.5 THEN TAG:MOVE x,y:PRINT "..";:MOVE x,y:PRINT "..";:TAGOFF
2200 IF y<2 OR x<2 OR x>638 THEN 2230
2210 WEND
2220 MOVE (xpo-1)*16,286:DRAW x,y:GOTO 2250
2230 MOVE (xpo-1)*16,286:DRAW x,y
2240 SOUND 1,1000,50,15:GOTO 1520
2250 PEN 0:SOUND 17,20,20,15:SOUND 10,19,20,15
2260 IF fw<6 THEN LOCATE xpo-1,8:PRINT CHR$(255)
2270 IF fw>=6 THEN LOCATE xpo-1,8:PRINT CHR$(254)
2280 PEN 3:PAPER 2
2290 fishcaught=fishcaught+1:LOCATE 23,3:PRINT fishcaught
2300 LOCATE 26,4:PRINT fw"  "
2310 weight(1)=weight(1)+fw:LOCATE 32,4:PRINT weight(1)" lb"
2320 PEN 2:PAPER 0:t2=TIME/300:IF t2-t1>300 THEN 2340
2330 GOTO 1500
2340 float=0:strike=0:loop=0:RETURN
2350 REM End of game
2360 PEN 3:PAPER 0:LOCATE 1,21:PRINT CHR$(20);:LOCATE 13,21:PRINT"STOP FISHING"
2370 FOR i=1 TO 50:SOUND 129,40,20,5,1:SOUND 130,39,5,1:FOR dl=1 TO 70:NEXT:NEXT
2380 LOCATE 14,23:PRINT"TIME'S UP"
2390 FOR dl=1 TO 5000:NEXT:FOR i=1 TO 30:PRINT:NEXT:RETURN
2400 REM Weigh-in
2410 PRINT CHR$(23)CHR$(0);
2420 PEN 3:LOCATE 5,1:PRINT"UNITED KINGDOM FISHING CONTEST"
2430 PEN 1:LOCATE 2,3:PRINT"Position"SPC(7)"Name"SPC(7)"Weight (lb)"
2440 MOVE 8,376:DRAW 632,376:MOVE 8,344:DRAW 632,344:MOVE 8,216:DRAW 632,216
2450 MOVE 8,376:DRAW 8,216:MOVE 168,376:DRAW 168,216
2460 MOVE 424,376:DRAW 424,216:MOVE 632,376:DRAW 632,216
2470 IF weight(1)>80 THEN msc=weight(1) ELSE msc=80
2480 p=1:FOR loop=msc TO 0 STEP -1:FOR i=1 TO 7
2490 IF weight(1)=loop AND i=1 THEN PEN 2 ELSE PEN 1
2500 IF weight(i)=loop THEN LOCATE 5,p+4:PRINT p;STRING$(4,9)name$(i):LOCATE 31,p+4:PRINT weight(i):p=p+1:IF p-1=1 THEN winner$=name$(i)
2510 NEXT:NEXT:LOCATE 1,13
2520 PRINT"The winner,"winner$",will receive"
2530 LOCATE 4,15:PRINT"The sponsor's solid-gold trophy."
2540 PEN 0:PAPER 3:LOCATE 10,17:PRINT SPC(21):LOCATE 10,18:PRINT"UNITED KINGDOM ANGLER"
2550 LOCATE 10,19:PRINT SPC(5)"OF THE YEAR"SPC(5):LOCATE 12,20:PRINT SPC(17)
2560 LOCATE 14,21:PRINT " PRESENTED TO":LOCATE 14,22:PRINT SPC(13)
2570 LOCATE 12,23:PRINT SPC(17):LOCATE 20-INT(LEN(winner$)/2),23:PRINT winner$:GOSUB 2620
2580 PEN 1:PAPER 0:LOCATE 11,25:PRINT"Press a key to fish";
2590 IF INKEY$<>"" THEN 2590
2600 CALL &BB18:RETURN
2610 REM Jingle
2620 FOR i=1 TO 15:READ tp1,tp2,d:SOUND 17,tp1,d,15,1:SOUND 10,tp2,d,15,1:NEXT
2630 RETURN
2640 DATA 159,190,40,190,239,20,239,319,40
2650 DATA 213,252,20,190,239,40,213,252,20
2660 DATA 190,239,20,159,190,70,0,0,10
2670 DATA 159,190,40,190,239,20,239,319,40
2680 DATA 190,239,20,213,252,60,239,319,60