1 REMark &&&& J A V E L I N &&&&
2 REMark 
3 REMark  !!!!  A.DIDCOCK  !!!!
4 REMark from ZX Computing Jun'86
5 REMark The Spectrum has had all sorts of simulations available for it from Kung Fu to Decathlons, but now QL users can join the Daley Thompson crowd with this sports simulation.
6 REMark RUN UP: Pounding the Left/Right cursor keys builds up power & speed, and the fir button must be pressed to throw or jump. The length of time that you hold down the space bar determines the angle of throw/jump, and this is indicated in the bottom right of the screen.
7 REMark To advance onto later events you have to equal the qualifying distance and score - so no goofing off!
10 MODE 8: hiscore=0: udgs
20 f_level
40 draw_main_screen
50 draw_power
60 initialise
69 :
90 REPeat game
100  event_1
110  IF NOT qualify THEN end_routine: GO TO 20
200  next_level
210  IF NOT qualify THEN end_routine: GO TO 20
215  level=level+.5
220 END REPeat game
699 :
700 DEFine PROCedure hi_scores
705 LOCal i
707 hi(event,0)=distance
708 hi$(event,0)=a$
710 IF hi(event,0)>hi(event,1) THEN
720  wr=wr+1
730  FOR i=3 TO 1 STEP -1
740   hi(event,i)=hi(event,i-1)
750   hi$(event,i)=hi$(event,i-1)
760  END FOR i
762  RETurn
764 END IF
766 IF hi(event,0)>hi(event,2) THEN
770  hi(event,3)=hi(event,2): hi$(event,3)=hi$(event,2)
772  hi(event,2)=hi(event,0): hi$(event,2)=hi$(event,0)
774  wr=wr+1
776  RETurn
778 END IF
780 IF hi(event,0)>hi(event,3) THEN
782  wr=wr+1
784  hi(event,3)=hi(event,0): hi$(event,3)=hi$(event,0)
786  RETurn
788 END IF
790 END DEFine
799 :
800 DEFine PROCedure reset
810 STRIP #3,7,0
820 AT #3,1,8: PRINT #3,"                 "
830 INK #3,2: STRIP #3,7
840 AT #3,1,36: PRINT #3,"00:"
850 END DEFine
2999 :
3000 DEFine PROCedure event_1
3005 event=1: pos=2: CLS #7
3010 INK #4,7: FOR i=2 TO 4: AT #4,i,14: PRINT #4,"00.00": END FOR i
3015 qual=0
3020 REPeat jav_loop
3025 draw_jav
3030 foul=0: power=8: reset: dist=0: me=0
3035 key1=0: key2=0: char=132: n=0: co=0
3040 CSIZE 2,1: STRIP 2: INK 5: AT 9,8: PRINT CHR$(132)
3045 INK 7: LINE 25,26 TO 35,26
3050 CSIZE 2,0: INK 2: PAPER 4: AT 10,3: PRINT "YOUR GO:"
3055 FOR i=100 TO 10 STEP -1: BEEP 300,i: END FOR i
3056 PAUSE 40000
3060 BEEP 1000,5
3065 AT 10,3: PRINT "          ": AT #3,1,power: STRIP #3,0: PRINT #3," "
3067 CSIZE 2,1
3070 FOR i=1 TO 34
3075  key1=KEYROW(1)
3080  BEEP 300,100
3083  IF key1>=64 AND key1<100 THEN EXIT i
3085  IF key1<>0 AND key1<>key2 AND power<23.5 THEN n=n+1
3090  IF n=INT(level) THEN power=power+1: n=0
3095  IF power>8 AND (key1=0 OR key1=key2) THEN power=power-.2
3100  AT #3,1,power: STRIP #3,0: PRINT #3," ": STRIP #3,7,0: AT #3,1,power+1: PRINT #3," "
3105  key2=key1
3110  IF char=133 THEN char=132: ELSE char=133
3115  INK 2: STRIP 2
3120  LINE 25,26 TO 35,26: AT 9,8: PRINT " ": PAN #8,-10: INK 5: AT 9,8: PRINT CHR$(char): INK 7: LINE 25,26 TO 35,26
3124  co=co+1
3125  IF co=10 THEN INK 2: CSIZE 2,0: STRIP 1: AT 19,37: PRINT me+10
3126  IF co=10 THEN LINE #8,1451,100 TO 1371,0: co=0: me=me+10
3127  CSIZE 2,1: INK 5: STRIP 2
3180 END FOR i
3185 IF i=34 THEN foul=1
3186 dist=-((33-i)): power=power*1.14
3190 IF NOT foul THEN throw_jav: GO TO 3200
3191 CSIZE 2,0
3192 distance=0
3193 STRIP 1: INK 2: FLASH 1: AT 14,2: PRINT "FOUL": BEEP 0,30,37,9000,7,0,0,0: FLASH 0
3194 FOR i=1 TO 1000: END FOR i: BEEP
3195 INK #4,7: AT #4,pos,14: PRINT #4,"-----"
3200 pos=pos+1
3205 INK #4,2
3210 IF score>9 AND score<100 THEN AT #4,0,10: PRINT #4,score
3215 IF score>99 AND score<1000 THEN AT #4,0,9: PRINT #4,score
3220 IF score>999 AND score<10000 THEN AT #4,0,8: PRINT #4,score
3221 IF score>9999 THEN AT #4,0,7: PRINT #4,score
3225 hi_scores
3230 print_hi_scores
3235 FOR i=1 TO 1500: END FOR i
3236 STRIP 4
3240 AT 11,1: PRINT "                    "
3241 AT 14,2: PRINT "     "
3245 IF pos=5 THEN EXIT jav_loop
3250 END REPeat jav_loop
3255 qualify=qual
3260 END DEFine
3299 :
3300 DEFine PROCedure throw_jav
3305 BEEP 1000,5
3310 angle=10: STRIP #3,7: INK #3,2
3315 AT #3,1,36: PRINT #3,angle
3320 REPeat key_jav
3325  IF KEYROW(1)=0 OR angle>80 THEN EXIT key_jav
3330  angle=angle+3
3335  AT #3,1,36: PRINT #3,angle
3340 END REPeat key_jav
3342 BEEP 1000,5
3345 x=25: y=28
3350 h=angle/60: a=angle/12: b=SQRT(100-(a*a)): hh=1: a1=a: ha=0
3355 INK 2: LINE 25,26 TO 35,26: INK 7: LINE x,y TO x+b,y+a
3356 IF angle>50 THEN power=power-(angle/10)
3357 i=1
3358 IF angle<30 THEN power=power-1
3360 REPeat mve_jav
3362  y1=y
3370  PAN #8,-10
3373  co=co+1: dist=dist+1
3374  IF co=10 AND me<90 THEN INK 2: CSIZE 2,0: STRIP 1: AT 19,37: PRINT me+10
3375  IF co=10 THEN LINE #8,1451,100 TO 1371,0: co=0: me=me+10
3380  IF (y+h)+a<64 AND NOT ha THEN y=y+h
3384  IF y+a<28 THEN EXIT mve_jav
3385  INK 4: LINE x,y1 TO x+b,y1+a1: INK 7: LINE x,y TO x+b,y+a
3386  a1=a
3390  IF i>(power*3)*.7 AND hh THEN hh=0: h=-h: a=-a: ha=0
3396  IF i>(power*3)*.5 AND hh THEN ha=1
3397  i=i+1
3399 END REPeat mve_jav
3402 PAN #8,-29
3405 INK 4: LINE x,y1 TO x+b,y1+a1: INK 7: LINE x,y+a TO x+b,y+(a+a)
3410 CSIZE 2,1: INK 2: STRIP 4
3412 distance=dist+(INT(RND(1 TO 98))/100)
3413 CSIZE 2,0
3414 IF distance<1 THEN distance=0: dist=distance
3415 AT 11,1: PRINT "YOUR THROW WAS ";distance;"m"
3420 IF distance>70.23 THEN qual=1
3425 score=score+(dist*5)
3430 IF distance<10 THEN INK #4,7: AT #4,pos,14: PRINT #4,"0";distance: ELSE INK #4,7: AT #4,pos,14: PRINT #4,distance
3440 END DEFine
11999 :
12000 DEFine PROCedure draw_jav
12005 OPEN #8,scr_492x25a10x183
12010 PAPER #8,2: INK #8,7: CLS #8
12020 print_hi_scores
12035 INK #4,6: AT #4,6,9: PRINT #4,"JAVELIN  "
12036 CSIZE 2,0
12040 INK 0: STRIP 4: AT 8,1: PRINT "QUALIFYING DISTANCE = 70.23m"
12050 FILL #8,1: LINE #8,1410,100 TO 1330,0: LINE #8,1450,100 TO 1370,0: FILL #8,0
12060 PAPER #8,1: INK #8,1
12065 FILL #8,1: LINE #8,1451,100 TO 1371,0: LINE #8,1520,100 TO 520,0: FILL #8,0
12066 INK #8,6
12070 END DEFine
19999 :
20000 DEFine PROCedure draw_main_screen
20010 WINDOW 512,256,0,0
20020 PAPER 4
20030 SCALE 100,0,0
20040 BORDER 5,1
20050 CLS
20060 OPEN #3,scr_511x30a2x226
20070 PAPER #3,7
20080 BORDER #3,1,3
20090 CLS #3
20100 OPEN #4,scr_492x78a10x5
20110 PAPER #4,0
20120 BORDER #4,1,7
20130 CLS #4
20140 INK #4,2
20145 CSIZE #4,2,0
20150 AT #4,0,0: PRINT #4,"SCORE: 00000     EVENT 01     LEVEL 0";level
20160 INK #4,5
20180 LINE #4,235,88 TO 235,24
20190 LINE #4,0,24 TO 480,24
20200 INK #4,7
20210 AT #4,2,2: PRINT #4,"FIRST:"
20220 AT #4,3,1: PRINT #4,"SECOND:"
20230 AT #4,4,2: PRINT #4,"THIRD:"
20270 INK #4,3
20280 AT #4,1,24: PRINT #4,"WORLD RECORDS"
20290 INK #4,7
20300 AT #4,2,21: PRINT #4,"1st"
20310 AT #4,3,21: PRINT #4,"2nd"
20320 AT #4,4,21: PRINT #4,"3rd"
20460 INK #4,6
20470 AT #4,6,0:PRINT #4,"  EVENT:              WORLD RECORDS: 00"
20480 INK #3,2
20490 AT #3,1,1: PRINT #3,"SPEED:"
20500 AT #3,1,29: PRINT #3,"ANGLE:": STRIP 5: AT #3,1,36: PRINT #3,"00:"
20510 END DEFine
20599 :
20600 DEFine PROCedure draw_power
20605 RESTORE 30000
20610 FOR i=8 TO 24 STEP 3
20611  READ col
20615  STRIP #3,col
20620  AT #3,0,i: PRINT #3,"   "
20630  STRIP #3,7,0: AT #3,1,i: PRINT #3,"   "
20660 END FOR i
20670 END DEFine
20999 :
21000 DEFine PROCedure initialise
21005 RANDOMISE
21015 OPEN #7,scr_492x142a10x84: PAPER #7,4
21030 score=0
21040 DIM hi(1,4)
21050 DIM hi$(1,3,3)
21090 hi$(1,1)="AAA"
21100 hi$(1,2)="BBB"
21110 hi$(1,3)="CCC"
21120 event=1: events=0
21130 wr=0
21170 hi(1,1)=96.91
21180 hi(1,2)=94.56
21190 hi(1,3)=90.56
21260 round=1
21270 DIM ql(3)
21280 ql(1)=1200
21285 ql(2)=1000
21290 ql(3)=800
21900 END DEFine
21999 :
22000 DEFine PROCedure print_hi_scores
22005 INK #4,6
22010 IF wr<10 THEN AT #4,6,38: PRINT #4,wr
22020 IF wr>9 THEN AT #4,6,37: PRINT #4,wr
22030 INK #4,7
22040 FOR i=1 TO 3
22045 IF hi(event,i)<10 THEN
22050  AT #4,i+1,27: PRINT #4,"0";hi(event,i)
22055 ELSE
22057  AT #4,i+1,27: PRINT #4,hi(event,i)
22058 END IF
22060 AT #4,i+1,37: PRINT #4,hi$(event,i)
22070 END FOR i
22080 END DEFine
22999 :
23000 DEFine PROCedure f_level
23010 WINDOW 512,256,0,0
23030 PAPER 4
23030 STRIP 1: INK 6
23040 CSIZE 2,1
23050 BORDER 5,5
23060 CLS
23065 AT 0,13: PRINT "J A V E L I N"
23070 INK 0: CSIZE 2,0: STRIP 2
23080 AT 3,10: PRINT "FOR THE SINCLAIR QL"
23090 INK 7: STRIP 0: AT 5,14: PRINT "by A.DIDCOCK"
23100 INK 1: STRIP 4
23120 AT 12,2: PRINT "1/ Simple"
23130 AT 14,2: PRINT "2/ Medium"
23140 AT 16,2: PRINT "3/ Difficult"
23145 INK 0
23150 AT 10,0: INPUT "WHICH LEVEL DO YOU WANT TO PLAY ON ? ";level
23155 BEEP 500,5
23160 IF level<1 OR level>3 THEN GO TO 23150
23165 level1=level
23170 OPEN #5,scr_512x180a0x75
23180 PAPER #5,4
23190 BORDER #5,4,5
23200 CLS #5
23210 INK 1
23220 AT 12,8: PRINT "(HAS TO BE 3 CHARACTERS)": AT 15,2: PRINT "eg. INITIALS: ADD"
23230 INK 0
23240 AT 10,7: INPUT "ENTER YOUR IDENTIFYING CODE: ";a$
23245 BEEP 500,5
23250 IF LEN(a$)<>3 THEN GO TO 23240
23260 END DEFine
23999 :
24000 DEFine PROCedure end_routine
24005 BORDER: BORDER 5,1
24010 PAPER 4: CLS
24020 CSIZE 2,0: INK 1,2: STRIP 4
24030 AT 1,7: PRINT "YOU HAVE FAILED TO QUALIFY "\\"           FOR THE NEXT EVENT"
24040 INK 2
24050 AT 7,1: PRINT "YOU SCORED ";score;" POINTS"
24060 AT 9,6: PRINT "AND ACCUMULATED ";wr;" WORLD RECORDS"
24070 AT 11,20: PRINT "ON LEVEL ";level1
24080 INK 0
24090 AT 13,1: PRINT "YOU ALSO COMPLETED ";events;" EVENTS"
24095 IF score>hiscore THEN hiscore=score
24096 AT 15,9: INK 2,0: PRINT "THE HI-SCORE IS ";hiscore
24100 INK 1
24102 BEEP 0,0,20,-5000,-200
24105 FOR i=1 TO 2000: END FOR i
24110 AT 19,6: PRINT "PRESS ANY KEY TO PLAY AGAIN"
24120 PAUSE 40000
24130 BEEP 300,10
24140 END DEFine
24999 :
25000 DEFine PROCedure next_level
25005 reset: events=events+1
25010 CLS #7: CSIZE 2,0: INK 1,2: STRIP 4
25040 round=round+1
25050 IF (score/(round-1))<ql(level1) THEN qualify=0: ELSE qualify=1
25055 IF NOT qualify THEN RETURN
25070 IF qualify THEN FLASH 1: AT 15,2: PRINT "YOU HAVE QUALIFIED FOR THE NEXT ROUND": FLASH 0
25080 FOR i=1 TO 3000: END FOR i
25085 CLS #7: BEEP 1000,5
25090 END DEFine
29999 :
30000 DATA 5,1,6,4,3,2
31999 :
32000 DEFine PROCedure udgs
32005 start=RESPR(100)
32010 a0=65537
32020 a2=start+6
32030 RESTORE 32100
32040 FOR i=0 TO 25: READ byte: POKE start+i,byte
32050 CALL start,0,0,255,37,0,0,0,a0,0,a2
32060 END DEFine
32099 :
32100 DATA 32,4,78,67,78,117
32110 DATA 132,2
32160 DATA 88,88,112,52,60,48,56,40,76
32170 DATA 88,88,112,48,48,48,16,16,48
