130 help:RANDOMISE:base$="GUILDFORD":alphabet:i=60:j=50:launched=0:sc=0
190 PRINT #2,\'   Press any key to continue':PAUSE
200 channels:grid:menu
230 REPeat game
240 ufo:chosen=0:c=1:hilight:score=-1
280 REPeat tracking
290 d1=dist(x,y,60,50):d2=dist(i,j,60,50):d3=dist(x,y,i,j)
300 IF d1>size:CLS #0:EXIT tracking
310 IF status=0 AND d1<10:PRINT #0;\\'ENEMY PLANE OVERHEAD'\'BOMBS DROPPING':stats:PAUSE 9:RECOL #3,2,3,4,5,6,7,0,1:STOP
320 sc=sc+score-launched
330 AT #3,20,22:PRINT #3;score-launched;" "
340 AT #3,20,55:PRINT #3;sc;" "
350 display:choices:action:display
390 x=x+SIN(RAD(heading))*speed/600:y=y+COS(RAD(heading))*speed/600
410 IF launched
420 i=i+SIN(RAD(b)):j=j+COS(RAD(b))
440 IF launched=2 AND d2<1:launched=0:CLS #0
450 END IF 
460 END REPeat tracking
470 CLS #5:hilight
490 END REPeat game
500 DEFine PROCedure grid
510 INK 0:size=50:FILL 1:OVER 0:centre:CIRCLE_R 0,0,size:INK 4:FILL 0
580 FOR r=10 TO size STEP 10:centre:CIRCLE_R 0,0,r
590 FOR angle=0 TO 360 STEP 10
600 centre:TURNTO angle
620 IF angle MOD 30:PENUP:ELSE :PENDOWN
630 MOVE size:PENDOWN:MOVE -3
660 END FOR angle
670 END DEFine 
680 DEFine PROCedure centre
690 LINE 60,50
700 END DEFine 
710 DEFine PROCedure ufo
720 OVER -1:INK 7
740 dirn=RND(2*PI)
750 x=size*SIN(dirn)+60:y=size*COS(dirn)+50
770 heading=INT(course(50,60,x,y))+RND(-50 TO 50)
780 status=RND(4)-1:limit status,0,3
790 SELect ON status
800 =0:RESTORE 2290:height=50000
810 =1:RESTORE 2300:height=40000
820 =2,3:RESTORE 2310:height=20000
830 END SELect 
840 plane
850 END DEFine 
860 DEFine PROCedure display
870 CIRCLE x,y,1
880 IF d2<size:CIRCLE i,j,.5
890 END DEFine 
900 DEFine PROCedure channels
910 MODE 4:CSIZE #0,2,0:CSIZE #2,2,0
920 OPEN #3,scr_512x256a0x0:PAPER #3,2,0:CLS #3
960 screen 4,20:screen 5,400
980 PAPER #0,2,0:CLS #0:PAPER 0:WINDOW 280,175,120,30
1000 END DEFine 
1010 DEFine PROCedure screen(chan,left)
1020 OPEN #chan,scr_
1030 WINDOW #chan,100,175,left,30:CLS #chan
1050 BORDER #chan,1,7:BORDER #chan,2
1060 END DEFine 
1070 IF status=2:score=5:ELSE score=2
1080 DEFine PROCedure menu
1090 CLS #4
1100 PRINT #4;'1 IDENTIFY'\\'2 ACKNOWLEDGE'\\'3 INTERCEPT'\\'4 ALTER COURSE'\\'5 RADIO CONTACT'
1105 PRINT #4;\'6 VISUAL'\\'7 SHOOTDOWN'\\'8 RETURN'\\'9 STOP'
1110 END DEFine 
1120 DEFine PROCedure stats
1130 CLS #5
1140 PRINT #5;'Call sign:'\callsign$\\'Type:'\type$\\'Nationality:'\nat$
1145 PRINT #5;\'Heading:'\num$(heading)\\'height: (ft)'\height\\'Speed: (mph)'\speed
1150 SELect ON status
1160 =1,3:score=2
1170 =2:score=5
1180 =0:score=-5
1190 END SELect 
1200 END DEFine 
1210 DEFine PROCedure choices
1220 IF chosen<100:chosen=0
1230 k=CODE(INKEY$)
1240 SELect ON k
1250 =208:change c-(c>1)
1260 =216:change c+(c<9)
1270 =32:chosen=c
1280 =49 TO 57:chosen=k-48:change k-48
1290 END SELect 
1300 END DEFine 
1330 DEFine PROCedure hilight:OVER #4,-1:BLOCK #4,92,10,0,20*c-20,2:END DEFine 
1350 DEFine PROCedure action
1360 SELect ON chosen
1370 =1:PRINT #0;\\'This is'!ba$!'UFO'\'Please identify yourself . . .':chosen=100:change 3:reset
1380 =2:PRINT #0;\\\ba$!call$\'You are clear to proceed'\\:chosen=0:IF launched:change 8:ELSE change 1
1390 =3:launch
1400 =4:alter
1410 =5:contact
1420 =6:visual
1430 =7:shoot
1440 =8:abort
1450 =9:PRINT #0;\\'Type "CONTINUE" to carry on':STOP:CLS #0
1460 =100
1470 IF delay AND d1<45 AND status=1 OR status=3 OR status=2 AND d3<25
1480 PRINT #0;attack$!base$\nat$!type$\'Flying'!height!'ft'\'Heading'!num$(heading)!'Speed'!speed!'mph';
1490 stats:chosen=0:change 2
1500 IF status=2:AT #0,1,20:PRINT #0;'Radio weak'
1510 END IF 
1520 END SELect 
1530 END DEFine 
1550 DEFine PROCedure reset:finish=DATE+RND(4)+1:END DEFine 
1580 DEFine FuNction delay:RETurn DATE>finish:END DEFine 
1610 DEFine FuNction dist(a,b,c,d):RETurn SQRT((a-c)*(a-c)+(b-d)*(b-d)):END DEFine 
1630 DEFine PROCedure launch
1640 PRINT #0;\ba$!'INTERCEPTOR 1'\'SCRAMBLE'\'Seek and identify craft'
1650 change 5:launched=1:b=course(x,y,i,j):sc=sc-50
1680 END DEFine 
1690 DEFine PROCedure alter
1695 b=INT(course(x,y,i,j))
1700 PRINT #0;\ba$!'INTERCEPTOR 1'\'Change course to bearing'!num$(b)
1730 END DEFine 
1740 DEFine PROCedure contact
1750 PRINT #0;\inter$!'UFO'\'You are in restricted air space'\'Please identify . . .'
1760 chosen=100:reset
1770 END DEFine 
1780 DEFine PROCedure visual
1790 PRINT #0;\inter$!base$
1800 IF d3<20
1810 PRINT #0;'I have visual sighting'\'Target is'!nat$!type$\'Flying at'!height!'ft'
1820 stats:change 7
1830 ELSE 
1840 PRINT #0;'Target not yet in sight'\\
1850 END IF 
1860 END DEFine 
1870 DEFine PROCedure shoot
1880 PRINT #0;\ba$!'INTERCEPTOR 1'\'DESTORY TARGET'
1890 IF d3<10
1900 shootdown:speed=0:hilight:change 8:EXIT tracking
1940 ELSE 
1950 PRINT #0;inter$!base$!'Target out of range'
1960 END IF 
1970 END DEFine 
1980 DEFine PROCedure abort
1990 PRINT #0;\ba$!'INTERCEPTOR 1'\'Return to base'
2000 b=course(60,50,i,j):launched=2:change 1
2020 END DEFine 
2030 DEFine FuNction course(w,x,y,z)
2040 IF x=z:temp=90:ELSE temp=DEG(ATAN((w-y)/(x-z)))
2050 IF x<z:temp=temp+180
2060 RETurn temp
2070 END DEFine 
2080 DEFine PROCedure change(n)
2090 IF c=n:RETurn 
2100 hilight:c=n:hilight
2130 END DEFine 
2140 DEFine PROCedure murder
2150 stats
2160 PRINT #0;'You have shot down  an innocent plane'
2170 RECOL #3,7,6,5,4,3,2,1,0
2180 STOP
2190 END DEFine 
2200 DEFine PROCedure plane
2210 p=RND(1 TO 4)
2220 FOR pl=1 TO p:READ type$,nat$
2230 height=height+RND(20)*100
2240 call$=alpha$(RND(25)+1):callsign$=call$(1)
2250 call$=alpha$(RND(25)+1)&' '&call$
2260 callsign$=call$(1)&callsign$&num$(RND(999))
2270 speed=RND(30 TO 55)*10
2280 END DEFine 
2290 DATA 'MIRAGE','ARGENTINIAN','MIG-23','RUSSIAN','SU-15','LIBYAN','BACKFIRE BOMBER','IRANIAN'
2300 DATA 'NIMROD','AUSTRALIAN','B-52 BOMBER','AMERICAN','AWACS','CANADIAN','HARRIER','BRITISH'
2310 DATA 'CONCORDE','FRENCH','A300 AIRBUS','SWISS','BOEING 747','INDIAN','DC-10','SWEDISH'
2320 DEFine FuNction num$(a)
2330 a=a MOD 360
2340 RETurn FILL$('0',3-LEN(a))&a
2350 END DEFine 
2360 DEFine PROCedure alphabet
2370 DIM alpha$(26,9):RESTORE 2380
2380 DATA 'ALPHA','BRAVO','CHARLIE','DELTA','ECHO','FOXTROT','GOLF','HOTEL','INDIA','JULIET','KILO','LIMA','MIKE'
2385 DATA 'NOVEMBER','OSCAR','PAPPA','QUEBEC','ROMEO','SIERRA','TANGO','UNIFORM','VICTOR','WHISKY','X-RAY','YANKEE'
2386 DATA "ZULU"
2390 FOR a=1 TO 26:READ alpha$(a)
2400 END DEFine 
2410 DEFine PROCedure help
2440 MODE 8:PAPER #2,1:CLS #2:WINDOW #2,448,200,32,16
2450 CSIZE #2,3,1:AT #2,0,11:PRINT #2;'RADAR':CSIZE #2,0,0
2470 DATA "You are operating a radar screen to control Britain's air defenses"
2480 DATA 'Most of the planes will be friendly so you may let them pass'
2490 DATA 'If they will not identify themselves, you should send up an interceptor'
2495 DATA 'WARNING some planes have a weak radio so make visual sighting before shooting them down'
2500 DATA 'A default action will be highlighted at the left of the screen'
2510 DATA 'The default can be moved by pressing the up and down cursor keys'
2520 DATA 'Press the space bar to accept the action'
2530 DATA "You can skip these instructions by holding down 'ESC' next time"
2540 RESTORE 2470
2550 REPeat loop
2560 READ in$:PRINT #2;\in$!'...'
2570 IF EOF OR INKEY$(200)=CHR$(27):EXIT loop
2600 END REPeat loop
2610 END DEFine 
2630 DEFine FuNction ba$:BEEP 200,10:RETurn base$&' to ':END DEFine 
2660 DEFine FuNction inter$:BEEP 2000,0:RETurn 'INTERCEPTOR 1 to ':END DEFine 
2690 DEFine FuNction attack$:BEEP 2000,0,20,100,1:RETurn callsign$&'to':END DEFine 
2710 DEFine PROCedure shootdown
2720 controls:cockpit:CLS:BORDER 1,4:BORDER 0:FILL 0
2750 FOR star=1 TO 50:POINT RND(120),RND(100)
2760 across=RND(120):up=RND(100):distance=INT(d3*200)
2810 INK 4:centre:CIRCLE_R 0,0,5:LINE_R 0,10 TO 0,-20,-10,10 TO 20,0:INK 7
2830 BEEP 0,200,250,9,1
2840 REPeat aim
2850 show
2860 AT #5,3,0:PRINT #5;height
2870 AT #5,8,7:PRINT #5,INT(distance);' '
2880 AT #5,13,0:PRINT #5;height-50+up
2890 k=CODE(INKEY$(0))
2900 show
2910 SELect ON k
2920 =192:change 4:across=across+3
2930 =200:change 6:across=across-3
2940 =208:change 3:up=up-3:height=height+3
2950 =216:change 7:up=up+3:height=height-3
2960 =32:IF hit:EXIT aim
2970 END SELect 
2980 across=across+RND(-1 TO 1):up=up+RND(-1 TO 1):distance=distance+(speed-600)/5
3010 limit across,0,120:limit up,0,99:limit distance,500,9999
3040 IF k=0:change 5
3050 END REPeat aim
3060 CLS #3:channels:grid:menu
3070 END DEFine 
3080 DEFine PROCedure show
3100 OVER -1:FILL 1:CIRCLE across,up,5000/distance,.2,PI/2:OVER 0:FILL 0
3120 END DEFine 
3130 DEFine FuNction hit
3140 CLS #0:PRINT #0;inter$!base$\'Target in sight Launching missles...':BEEP 0,99,150,9,10
3150 FOR mis=0 TO 50 STEP 5
3160 show:missiles:show
3190 across=across+RND(-1 TO 1):up=up+RND(-1 TO 1)
3210 missiles
3220 END FOR mis
3230 IF dist(across,up,60,50)<10
3240 PRINT #0;,'Target destroyed'
3250 FOR e=5 TO 90 STEP 2:centre:CIRCLE_R 0,0,e:BEEP 999,e
3260 IF status=0:sc=sc+500:ELSE murder
3270 RETurn 1
3280 ELSE 
3290 BEEP 0,200,250,9,1:PRINT #0;,'Missiles Missed':RETurn 0
3300 END IF 
3310 END DEFine 
3320 DEFine PROCedure missiles
3340 OVER -1:LINE 110-mis,mis:LINE_R TO 3,-3
3360 LINE 10+mis,mis:LINE_R TO -3,-3:OVER 0
3390 END DEFine 
3400 DEFine PROCedure limit(var,min,max)
3410 IF var<min:var=min
3420 IF var>max:var=max
3430 END DEFine 
3440 DEFine PROCedure controls
3450 CLS #4
3460 PRINT #4;\\\\' CLIMB'\\' BANK LEFT'\\'FIRE'\\' BANK RIGHT'\\' DIVE'
3470 c=5:hilight
3490 END DEFine 
3500 DEFine PROCedure cockpit
3510 CLS #5
3520 PRINT #5,'INTERCEPTOR'\\'Height: (ft)'\\\'Speed: (mph)'\600\\'--------------'
3525 PRINT #5;'RANGE:'\'--------------'\'TARGET'\\'Height: (ft)'\\\'Speed: (mph)'\speed
3530 END DEFine 
