home *** CD-ROM | disk | FTP | other *** search
/ The Glitch Apple Disk Collection / 2014.glitch.apple.collection.zip / indexed / PROGOLF1.DSK / GP.bas < prev    next >
BASIC Source File  |  2014-09-09  |  22KB  |  267 lines

  1. 100  ONERR  GOTO 10000
  2. 120  CALL 3114: SCALE= 1: ROT= 0:PL% = 1: GOTO 5000
  3. 140  IF YD(PL%) = YO%(H%)  THEN DR%(PL%) = A9%(H%): RETURN 
  4. 160 S = (XL(PL%) -HX%(H%))/(YD(PL%)/SC(H%)):C = (YL(PL%) -HY%(H%))/(YD(PL%)/SC(H%)): IF C = 0  THEN C = 1E -09
  5. 180 A% =  ATN(S/ ABS(C))/RA +.5: IF S < = 0  AND C < = 0  THEN DR%(PL%) = 90 +A%: RETURN 
  6. 200  IF S < = 0  AND C > = 0  THEN DR%(PL%) = 270 -A%: RETURN 
  7. 220  IF S > = 0  AND C > = 0  THEN DR%(PL%) = 270 -A%: RETURN 
  8. 240  IF S > = 0  AND C < = 0  THEN DR%(PL%) = 90 +A%: RETURN 
  9. 260 C%(PL% -1,14,1) = YD(PL%): IF C%(PL% -1,14,1) >C%(PL% -1,0,1)  THEN C%(PL% -1,14,1) = C%(PL% -1,0,1)
  10. 280 I = C%(PL% -1,14,1)/C%(PL% -1,0,1):C%(PL% -1,14,2) = C%(PL% -1,0,2) *I: IF C%(PL% -1,14,2) <7  THEN C%(PL% -1,14,2) = 7
  11. 300 C%(PL% -1,14,3) = C%(PL% -1,0,3) *I: IF C%(PL% -1,14,3) <10  THEN C%(PL% -1,14,3) = 10
  12. 320  RETURN 
  13. 321 C%(PL% -1,17,1) = YD(PL%): IF C%(PL% -1,17,1) >50  THEN C%(PL% -1,17,1) = 50
  14. 323 I = C%(PL% -1,17,1)/C%(PL% -1,18,1):C%(PL% -1,17,2) = C%(PL% -1,18,2) *I: IF C%(PL% -1,17,2) <7  THEN C%(PL% -1,17,2) = 7
  15. 325 C%(PL% -1,17,3) = C%(PL% -1,18,3) *I: IF C%(PL% -1,17,3) <10  THEN C%(PL% -1,17,3) = 10
  16. 327  RETURN 
  17. 340 C%(PL% -1,15,1) = YD(PL%): IF C%(PL% -1,15,1) >50  THEN C%(PL% -1,15,1) = 50
  18. 360 I = C%(PL% -1,15,1)/50:C%(PL% -1,15,2) = C%(PL% -1,16,2) *I: IF C%(PL% -1,15,2) <2  THEN C%(PL% -1,15,2) = 2
  19. 380 C%(PL% -1,15,3) = C%(PL% -1,16,3) *I: IF C%(PL% -1,15,3) <2  THEN C%(PL% -1,15,3) = 2
  20. 400  RETURN 
  21. 420 FL% = 1: IF S%(H% +(H% >9),PL%) < =  VAL( MID$ (G$,H%,1))  THEN GH%(PL%) = GH%(PL%) +1
  22. 440 PD% = 3 *YD(PL%) +.5:PF% = S%(H% +(H% >9),PL%) +1: POKE 3516,16: CALL 3120: POKE 3516,64: POKE 10,0: CALL 3099: IF PD% >115  THEN PD% = 115
  23. 460  FOR I = 78 TO 86  STEP 8: POKE 226,I: POKE 224,75: POKE 225,0:Q$ = PL$(PL%): CALL 3078: NEXT : POKE 226,70: POKE 224,195: POKE 225,0:Q$ =  STR$(DF(H%)): IF DF(H%) <1  THEN Q$ = "0" +Q$
  24. 480  IF Q$ = "1"  THEN Q$ = Q$ +".00"
  25. 500  CALL 3078: GOSUB 820:BX% = 245 -(2 *PD%):BY% = 49: GOSUB 840: IF ID$(PL%) < >"C" GOTO 560
  26. 520  IF FL% = 2  THEN X% = 0: FOR I = 1 TO 750: NEXT : GOTO 620
  27. 540  GOSUB 7000:X% =  VAL(A$) -1: FOR I = 1 TO 750: NEXT : GOTO 620
  28. 560 Q$ = Q$(0): POKE  -16368,0: POKE  -16384,0
  29. 580  POKE 224,58: POKE 225,0: POKE 226,180: CALL 3090: FOR I = 1 TO 600: NEXT : POKE 224,58: POKE 225,0: CALL 3090: FOR I = 1 TO 25:J =  PEEK( -16384): IF J <177  OR J >179  THEN J =  RND(1): NEXT : GOTO 580
  30. 600 I = 40: NEXT : GET A$: POKE  -16368,0:X% =  VAL(A$) -1
  31. 620 J = 123 +15 *X%: FOR I = J TO J +8: FOR I1 = 72 TO 78: XDRAW 15 AT I1,I: NEXT : NEXT : ON FL% -1 GOTO 680:ZB = 8: FOR I1 = 0 TO 7: IF PD% < = PU(PL% -1,0,I1,0)  THEN ZB = I1:I1 = 7
  32. 640  NEXT :PZ =  RND(1):ZA = 3: FOR I = 1 TO 2: IF PU(PL% -1,X%,ZB,I)/DF(H%) >PZ  THEN ZA = I:I = 2
  33. 660  NEXT I: FOR I = 1 TO ZA: GOSUB 860: NEXT :PN = ZA:T%(PL%) = 2:TP%(PL%) = TP%(PL%) +ZA
  34. 680  ON X% GOTO 700,720: IF  RND(1) >.5  THEN 720
  35. 700 PR% = PD% -(.75 + RND(1) *ZB/(1 +(PN <3)) +(PN = 3) *(1 + RND(1))): GOTO 740
  36. 720 PR% = PD% +(.75 + RND(1) *ZB/(1 +(PN <3)) +(PN = 3) *(1 + RND(1)))
  37. 740 PR% = 2 *PR%: IF PN = 1  THEN PR% = PD% *2
  38. 760  FOR I = 63 TO 65: XDRAW I AT BX%,BY% -9: FOR I1 = 1 TO 20: NEXT : XDRAW I AT BX%,BY% -9: NEXT : FOR I = 65 TO 63  STEP  -1: XDRAW I AT BX%,BY% -9: FOR I1 = 1 TO 20: NEXT : XDRAW I AT BX%,BY% -9: NEXT : XDRAW 63 AT BX%,BY% -9:I1 =  -16336:I =  PEEK(I1) - PEEK(I1): FOR I = BX% TO BX% +PR%: HCOLOR= 3: DRAW 66 AT I,BY%: FOR I1 = 1 TO 15: NEXT : HCOLOR= 0: DRAW 66 AT I,BY%: NEXT : HCOLOR= 3: DRAW 66 AT I -1,BY%
  39. 780 PN = PN -1: IF PN = 0  THEN I9 = 500 *( RND(1) >.95): FOR I1 = 1 TO 1 +I9: NEXT :I1 =  -16336:I1 =  PEEK(I1) - PEEK(I1): HCOLOR= 0: DRAW 62 AT 245,BY%: DRAW 66 AT I -1,BY%: HCOLOR= 3: DRAW 66 AT 247,BY% +4: FOR I = 1 TO 2500: NEXT : POKE 10,1: GOTO 4000
  40. 800  FOR I = 1 TO 750: NEXT :PD% =  ABS(PD% -(PR%/2)):PF% = PF% +1:FL% = 2:ZB = ((PD% >2) +(PD% >5)): CALL 3102: GOTO 460
  41. 820  POKE 224,195: POKE 225,0: POKE 226,78:Q$ =  STR$(PD%) +" FT": IF PD% = 0  THEN Q$ = "<1 FT"
  42. 830  CALL 3078: POKE 224,195: POKE 225,0: POKE 226,86:Q$ =  STR$(PF%): CALL 3078: RETURN 
  43. 840  HCOLOR= 3: DRAW 66 AT BX%,BY%: DRAW 60 AT BX%,BY% -2:Q$ =  STR$(H%): POKE 226,25: POKE 225,0: POKE 224,(253 -3 *(H% >9)): CALL 3078: RETURN 
  44. 860 S%(21,PL%) = S%(21,PL%) +1:S%(H% +(H% >9),PL%) = S%(H% +(H% >9),PL%) +1:S%(10 +10 *(H% >9),PL%) = S%(10 +10 *(H% >9),PL%) +1: RETURN 
  45. 880 Q$ = Q$(1): PRINT "<CTRL-G>": POKE 10,1: FOR J = 1 TO 5: CALL 3078: FOR I9 = 1 TO 400: NEXT : CALL 3078: FOR I9 = 1 TO 300: NEXT : NEXT :CO = 3 +12 *( RND(1) >.9): IF FL% = 2  THEN  XDRAW 67 AT X,Y: GOTO 3280
  46. 900 D0 = D: GOTO 3260
  47. 920 Q$ = Q$(2): PRINT "<CTRL-G><CTRL-G>": POKE 10,1: FOR J = 1 TO 5: CALL 3072: FOR I9 = 1 TO 400: NEXT : CALL 3078: FOR I9 = 1 TO 300: NEXT : NEXT : IF FL% = 2  THEN X = LX%:Y = LY%:X% = X:Y% = Y:DL = 0:E3 = 0:E4 = 0: CALL 3096:CO =  PEEK(5): GOTO 960
  48. 940 X = XL(PL%):Y = YL(PL%):X% = LX%:Y% = LY%: CALL 3096:CO =  PEEK(5)
  49. 960 DL = DL +1:X% = X +E2 *DL +(E4 * ABS(DE) *(DL ^2/D ^2)):Y% = Y +E1 *DL +(E3 * ABS(DE) *(DL ^2/D ^2)): CALL 3096: IF  PEEK(5) < >6  THEN CO =  PEEK(5):LX% = X%:LY% = Y%: GOTO 960
  50. 980 X% = LX%:Y% = LY%:X = X%:Y = Y%: GOSUB 860:D0 = D +1: NEXT D0: GOTO 3280
  51. 1000 Q$ = Q$(3): PRINT "<CTRL-G><CTRL-G><CTRL-G>": POKE 10,1: FOR J = 1 TO 5: CALL 3078: FOR I9 = 1 TO 400: NEXT : CALL 3078: FOR I9 = 1 TO 300: NEXT : NEXT :T%(PL%) = 2: GOSUB 860:D0 = D: NEXT D0:CO%(PL%) = 1:GH%(PL%) = GH%(PL%) +(S%(H% +(H% >9),PL%) < =  VAL( MID$ (G$,H%,1))): GOTO 3300
  52. 1020 Q$ = Q$(4): PRINT "<CTRL-G><CTRL-G>": POKE 10,1: FOR J = 1 TO 5: CALL 3078: FOR I9 = 1 TO 400: NEXT : CALL 3078: FOR I9 = 1 TO 300: NEXT : NEXT : GOSUB 860: GOSUB 860: CALL 3102: GOTO 2040
  53. 1040 FL% = 2: IF ( RND(1) >.8  OR ( RND(1) >.25  AND T$ = "R")  OR ( RND(1) >.4  AND ID$(PL%) = "C")  OR (CL% = 15  AND  RND(1) >.1)) GOTO 3260
  54. 1060 Q$ = Q$(5): PRINT "<CTRL-G>": POKE 10,1: FOR J = 1 TO 5: CALL 3078: FOR I9 = 1 TO 400: NEXT : CALL 3078: FOR I9 = 1 TO 300: NEXT : NEXT :LX% = X%:LY% = Y%:DV =  INT((10 + RND(1) *30)/SC(H%)):DI =  RND(1) *2 *PI:E2 =  COS(DI):E1 =  SIN(DI):X = X%:Y = Y%: FOR DL = 0 TO DV  STEP DV/5:X% = X +DL *E2:Y% = Y +DL *E1
  55. 1070  IF (X% <0  OR X% >279  OR Y% <0  OR Y% >191) GOTO 1020
  56. 1080  CALL 3096:CO =  PEEK(5): XDRAW 67 AT X%,Y%: IF CO < >6  THEN LX% = X%:LY% = Y%
  57. 1100 : FOR I = 1 TO 100: NEXT : NEXT :X = X%:Y = Y%: ON CO +1 GOTO 3280,3280,3280,880,3280,3280,920,880
  58. 1120 J =  INT( SQR((TX%(H%) -HX%(H%)) ^2 +(TY%(H%) -HY%(H%)) ^2)): FOR I = 1 TO P1%:YD(I) = J: NEXT : RETURN 
  59. 1140  POKE 10,1: CALL 3072: XDRAW 67 AT XL(PL%),YL(PL%): CALL 3078: FOR I9 = 1 TO 50: NEXT : XDRAW 67 AT XL(PL%),YL(PL%): CALL 3072: FOR I9 = 1 TO 50: IF  PEEK( -16384) <128  THEN  NEXT : GOTO 1140
  60. 1160 I9 = 50: NEXT I9: RETURN 
  61. 1180 A1 = DR%(PL%) -WD%: IF A1 <0  THEN A1 = A1 +360
  62. 1200  IF A1 < = 90  THEN A2 = A1/90:A3 = 1 -A2:WX% = A2 *WV%/SC(H%):WZ% =  -A3 *WV%/SC(H%): GOTO 1280
  63. 1220  IF A1 < = 180  THEN A1 = A1 -90:A3 = A1/90:A2 = 1 -A3:WX% = A2 *WV%/SC(H%):WZ% = A3 *WV%/SC(H%): GOTO 1280
  64. 1240  IF A1 < = 270  THEN A1 = A1 -180:A2 = A1/90:A3 = 1 -A2:WX% =  -A2 *WV%/SC(H%):WZ% = A3 *WV%/SC(H%): GOTO 1280
  65. 1260 A1 = A1 -270:A3 = A1/90:A2 = 1 -A3:WX% =  -A2 *WV%/SC(H%):WZ% =  -A3 *WV%/SC(H%)
  66. 1280  IF CL% <14  THEN DE = DE +WX%:D = D +WZ%: RETURN 
  67. 1300  IF YD(PL%) <51  THEN  RETURN 
  68. 1320 WX% = WX% *C%(PL% -1,14,1)/C%(PL% -1,0,1):WZ% = WZ% *C%(PL% -1,14,1)/C%(PL% -1,0,1):DE = DE +WX%: IF WZ% = 0  THEN  RETURN 
  69. 1340 I = C%(PL% -1,0,1) +WZ%:DV = D -YD(PL%): IF YD(PL%) >C%(PL% -1,0,1)  THEN DV = D -C%(PL% -1,0,1)
  70. 1360  IF I <YD(PL%)  THEN D = I +DV: RETURN 
  71. 1380 D = YD(PL%) +DV: RETURN 
  72. 1400 WV% = W% + RND(1) *WG%:WD% =  RND(1) *8:WD$ = Q$(WD% +22):WD% = WD% *45:Q$ = Q$(30) +WD$ +"," + STR$(WV%): POKE 224,0: POKE 225,0: POKE 226,30: POKE 10,0: CALL 3078: RETURN 
  73. 2000  FOR I = 1 TO P1%:T%(I) = 1:YD(I) = YO%(H%):CO%(I) = 0:XL(I) = TX%(H%):YL(I) = TY%(H%): NEXT :LN% = 0:PX% = PH%(H%):PY% = PV%(H%): IF YO%(H%) <250  THEN  GOSUB 1120
  74. 2020 P% = 1
  75. 2040 PL% = O1%(P%):P2% = 0: FOR I = 1 TO P1%: IF CO%(I) = 1  THEN P2% = P2% +1
  76. 2060  NEXT : IF ((P2% < >P1%  AND CO%(PL%) = 1)  OR T%(PL%) = 2)  THEN P% = P% +1: GOTO 2040
  77. 2080 ZZ$ = "": IF CO%(PL%) = 1 GOTO 420
  78. 2100  XDRAW 67 AT XL(PL%),YL(PL%): IF CO%(PL%) = 1  THEN 2140
  79. 2120 ZZ$ = "-" + STR$( INT(YD(PL%) +.5)) +" YDS": IF CO%(PL%) = 3  OR CO%(PL%) = 7  THEN ZZ$ = ZZ$ +" *"
  80. 2130  IF CO%(PL%) = 15  THEN ZZ$ = ZZ$ +" **"
  81. 2140  POKE 10,1:Q$ = PL$(PL%) +Q$(6) +ZZ$: CALL 3072:LN% = LN% +8: XDRAW 69 AT HX%(H%),HY%(H%): IF CO%(PL%) = 1 GOTO 420
  82. 2160  POKE  -16368,0:Q$ = Q$(7): IF ID$(PL%) = "C"  THEN  GOSUB 6000: GOTO 2980
  83. 2170  IF (CO%(PL%) = 7  OR CO%(PL%) = 3  OR CO%(PL%) = 15)  AND YD(PL%) <51  THEN CL% = 17: GOSUB 321: GOTO 2420
  84. 2180  GOSUB 1140: IF  PEEK( -16384) = 161  AND T%(PL%) < >1  THEN  POKE  -16384,0: POKE  -16368,0: GOTO 2180
  85. 2200  GET T$: IF  ASC(T$) = 27  THEN  GOSUB 20000: GOTO 2160
  86. 2220  IF T$ < >"R"  THEN CL$ = T$:T$ = "N": GOTO 2300
  87. 2240 Q$ = Q$ +"(R)":CO%(PL%) = 7:T$ = "R": POKE  -16368,0
  88. 2260  GOSUB 1140: IF  PEEK( -16384) = 161  AND T%(PL%) < >1  THEN  POKE  -16384,0: POKE  -16368,0: GOTO 2260
  89. 2280  GET CL$: IF  ASC(CL$) = 27  THEN  GOSUB 20000: POKE  -16368,0: GOTO 2260
  90. 2300 CL% =  ASC(CL$): IF (CL% <37  AND CL% >32)  THEN CL% = CL% -32: GOTO 2420
  91. 2320  IF (CL% <58  AND CL% >48)  THEN CL% = CL% -44: GOTO 2420
  92. 2340  IF CL% = 87  THEN CL% = 14: GOSUB 260: GOTO 2420
  93. 2360  IF CL% = 67  THEN CL% = 15: GOSUB 340: GOTO 2420
  94. 2380  IF T$ = "R"  THEN 2260
  95. 2400  GOTO 2160
  96. 2420 Q$ = Q$ +CL$(CL%): POKE 10,1: CALL 3072:LN% = LN% +8
  97. 2440  GOSUB 140:Q$ = Q$(8) + STR$(DR%(PL%)) +Q$(20): POKE  -16368,0:A$ = " ":DZ = 6 * LEN(Q$)
  98. 2460  GOSUB 1140: GET CL$: IF  ASC(CL$) < >8  THEN 2520
  99. 2480  IF  LEN(A$) = 1 GOTO 2460
  100. 2500 CL$ =  RIGHT$(A$,1):A$ =  LEFT$(A$, LEN(A$) -1):DZ = DZ -6: HCOLOR= 0: DRAW ( ASC(CL$) -31) AT PH%(H%) +DZ,PV%(H%) +LN%: HCOLOR= 3: GOTO 2460
  101. 2520  IF (( ASC(CL$) <48  OR  ASC(CL$) >57)  AND  ASC(CL$) < >13  AND  ASC(CL$) < >27) GOTO 2460
  102. 2540  IF  ASC(CL$) = 27  THEN  GOSUB 20000: GOTO 2460
  103. 2560  IF  ASC(CL$) = 13 GOTO 2580
  104. 2565  DRAW ( ASC(CL$) -31) AT PH%(H%) +DZ,PV%(H%) +LN%:DZ = DZ +6:A$ = A$ +CL$: IF  LEN(A$) >4 GOTO 2620
  105. 2570  GOTO 2460
  106. 2580  IF A$ = " " GOTO 2460
  107. 2620 DI% =  VAL(A$):Q$ = Q$ + RIGHT$(A$, LEN(A$) -1)
  108. 2640  IF DI% >360  THEN  POKE 10,1: HCOLOR= 0: CALL 3072: HCOLOR= 3: GOTO 2440
  109. 2660 D1 = DI% *RA:D = C%(PL% -1,CL%,1)/SC(H%):X% = XL(PL%) +D * COS(D1):Y% = YL(PL%) +D * SIN(D1): POKE  -16368,0: IF X% <1  THEN X% = 1
  110. 2680  IF X% >278  THEN X% = 278
  111. 2700  IF Y% <1  THEN Y% = 1
  112. 2720  IF Y% >190  THEN Y% = 190
  113. 2740  POKE 10,1: CALL 3072: XDRAW 67 AT XL(PL%),YL(PL%): XDRAW 68 AT X%,Y%: CALL 3078: FOR I9 = 1 TO 50: NEXT : XDRAW 67 AT XL(PL%),YL(PL%): XDRAW 68 AT X%,Y%: CALL 3072: FOR I9 = 1 TO 50: IF  PEEK( -16384) <128  THEN  NEXT : GOTO 2740
  114. 2760 I9 = 50: NEXT I9: GET A$: PRINT : IF  ASC(A$) < >13  THEN DI% = 361: GOTO 2640
  115. 2780 LN% = LN% +8:Q$ = Q$(9): POKE  -16368,0
  116. 2800  GOSUB 1140: GET CL$: IF CL$ = "N"  THEN CL$ = Q$(10):DE = 0: GOTO 2940
  117. 2820  IF CL$ = "H"  THEN CL$ = Q$(11):DE =  - RND(1): GOTO 2940
  118. 2840  IF CL$ = "S"  THEN CL$ = Q$(12):DE =  RND(1): GOTO 2940
  119. 2860  IF CL$ = "D"  THEN CL$ = Q$(13):DE =  - RND(1)/2: GOTO 2940
  120. 2880  IF CL$ = "F"  THEN CL$ = Q$(14):DE =  RND(1)/2: GOTO 2940
  121. 2900  IF  ASC(CL$) = 27  THEN  GOSUB 20000: GOTO 2800
  122. 2920  GOTO 2800
  123. 2940 Q$ = Q$ +" " +CL$: POKE 10,1: CALL 3072:LN% = LN% +8:Q$ = Q$(15): POKE  -16368,0
  124. 2960  GOSUB 1140: GET A$: POKE  -16368,0: IF  ASC(A$) = 27  THEN  GOSUB 20000: GOTO 2960
  125. 2980  CALL 3102: XDRAW 69 AT HX%(H%),HY%(H%): XDRAW 67 AT XL(PL%),YL(PL%):LN% = 0: IF A$ = "C"  THEN  XDRAW 69 AT HX%(H%),HY%(H%): GOTO 2140
  126. 3000 D = C%(PL% -1,CL%,1) -C%(PL% -1,CL%,2):J = C%(PL% -1,CL%,0)
  127. 3010  IF T$ = "R"  THEN J =  INT(J/3 +.5)
  128. 3011  IF CO%(PL%) < >3  AND CO%(PL%) < >7  AND CO%(PL%) < >15  THEN 3019
  129. 3012  IF CO%(PL%) = 3  OR CO%(PL%) = 7  THEN J = C%(PL% -1,18 -(YD(PL%) <51),0)
  130. 3014  IF CO%(PL%) = 15  THEN J =  INT(C%(PL% -1,18 -(YD(PL%) <51),0)/3 +.5)
  131. 3019  IF J = 0  THEN J = 1
  132. 3020 DV = 0: FOR I = 1 TO J:DV = DV + RND(1): NEXT :DV = 2 *DV/(J +.1): IF DV <1.41  THEN 3040
  133. 3025  IF CL% < >17  AND CL% < >15  AND (CL% < >14  AND YD(PL%) <51)  THEN 3020
  134. 3040 D =  INT((D +DV *C%(PL% -1,CL%,2))/SC(H%)):DV = 0: IF D <1  THEN D = 1
  135. 3060  FOR I = 1 TO J:DV = DV + RND(1): NEXT :DV = DV/J:DE =  INT(( -C%(PL% -1,CL%,3) +2 *DV *C%(PL% -1,CL%,3) +DE *C%(PL% -1,CL%,3) *2 *DV +.5)/SC(H%) +.05): ON WF% GOSUB 1180
  136. 3080 DI% = DI% -1 + RND(1) *2 +.05:D1 = DI% *RA:D2 =  SGN(DE) *PI/2:E1 =  SIN(D1):E2 =  COS(D1):E3 =  SIN(D1 +D2):E4 =  COS(D1 +D2):S = D/25 -.0001:LX% = XL(PL%):LY% = YL(PL%):DL = 0:I =  PEEK( -16336) - PEEK( -16336) + PEEK( -16336):FL% = 1:B = 1: FOR D0 = S TO D  STEP S
  137. 3100 X = XL(PL%) +E2 *D0 +(E4 * ABS(DE) *(D0 ^2/D ^2)):X% = X:Y = YL(PL%) +E1 *D0 +(E3 * ABS(DE) *(D0 ^2/D ^2)):Y% = Y: IF X <0  OR Y <0  OR X >279  OR Y >191 GOTO 1020
  138. 3120  CALL 3096:CO =  PEEK(5): IF CO < >6  THEN LX% = X%:LY% = Y%:DL = D0
  139. 3140  XDRAW 67 AT X%,Y%: IF (B <3  OR (B >7  AND B <21)  OR B >23) GOTO 3180
  140. 3160  IF CO = 5 GOTO 1040
  141. 3180  IF B <C%(PL% -1,CL%,4) GOTO 3260
  142. 3200  IF CO = 3  OR CO = 7 GOTO 880
  143. 3220  IF CO = 6 GOTO 920
  144. 3240  IF (CO = 1  AND  ABS(X -HX%(H%)) <.08  AND  ABS(Y -HY%(H%)) <.08  AND  RND(1) >.6)  THEN  XDRAW 69 AT HX%(H%),HY%(H%): GOTO 1000
  145. 3260 B = B +1: NEXT D0: XDRAW 67 AT X%,Y%
  146. 3280 XL(PL%) = X:YL(PL%) = Y:T%(PL%) = 0:YD(PL%) =  SQR((X -HX%(H%)) ^2 +(Y -HY%(H%)) ^2) *SC(H%):CO%(PL%) = CO: GOSUB 860: FOR I = 1 TO 3: XDRAW 67 AT X%,Y%: FOR J = 1 TO 150: NEXT : XDRAW 67 AT X%,Y%: FOR J = 1 TO 100: NEXT J,I: IF YD(PL%) <3  THEN CO%(PL%) = 1
  147. 3300  CALL 3102
  148. 4000 P% = P% +1: IF P% >P1%  THEN 4040
  149. 4020  IF T%(O1%(P%)) = 1  THEN 2040
  150. 4040 P2% = 0: FOR I = 1 TO P1%:P2% = P2% +T%(I): NEXT : IF P2%/2 = P1% GOTO 4120
  151. 4060  FOR I = 1 TO P1%:YE(I) = YD(I): NEXT : FOR I = 1 TO P1%:O% = 1: FOR J = 1 TO P1%: IF YD(J) < = YD(O%) GOTO 4100
  152. 4080 O% = J
  153. 4100  NEXT J:O1%(I) = O%:YD(O%) =  -1: NEXT I: FOR I = 1 TO P1%:YD(I) = YE(I): NEXT : GOTO 2020
  154. 4120  IF P1% = 1  THEN 4220
  155. 4140  FOR I = 1 TO P1%:O3%(I) = S%(H% +(H% >9),O2%(I)): NEXT 
  156. 4160 F% = 0: FOR I = 1 TO (P1% -1): IF O3%(I) < = O3%(I +1)  THEN 4200
  157. 4180 O% = O3%(I):O3%(I) = O3%(I +1):O3%(I +1) = O%:O% = O2%(I):O2%(I) = O2%(I +1):O2%(I +1) = O%:F% = 1
  158. 4200  NEXT : ON F% GOTO 4160: FOR I = 1 TO P1%:O1%(I) = O2%(I): NEXT 
  159. 4220  POKE  -16303,0: POKE 34,0: VTAB (H% +1 +(H% >9)): FOR J = 1 TO P1%: HTAB 13 +6 *J: PRINT S%(H% +(H% >9),J);: NEXT J: INVERSE : VTAB 11: FOR J = 1 TO P1%: HTAB 12 +6 *J: IF S%(10,J) <10  THEN  PRINT " ";
  160. 4240  PRINT S%(10,J);: NEXT J: NORMAL : IF H% <10  THEN 4300
  161. 4260  VTAB 21: INVERSE : FOR J = 1 TO P1%: HTAB 12 +6 *J: IF S%(20,J) <10  THEN  PRINT " ";
  162. 4280  PRINT S%(20,J);: NEXT J: NORMAL 
  163. 4300  VTAB 22: FOR J = 1 TO P1%: HTAB 12 +6 *J: IF S%(21,J) <10  THEN  PRINT " ";
  164. 4320  PRINT S%(21,J);: NEXT J: VTAB 24: POKE 34,23:H% = H% +1: IF H% <19 GOTO 5000
  165. 4340  POKE 4096,P1%: POKE 4097,CN%: POKE 4098,CB%: POKE 4099,NC%: FOR I = 1 TO P1%: POKE 4099 +I,S%(21,I)
  166. 4360  POKE 4104 +I,GH%(I): POKE 4109 +I,TP%(I):I1 = 4115 +(I -1) *5: POKE I1,IG%(I): FOR J = 1 TO 3: POKE I1 +J, ASC( MID$ (PL$(I),J,1)): NEXT : NEXT : FOR I = 1 TO NC%:I1 = 4135 +(I -1) *30: POKE I1, LEN(A$(I)): FOR J = 1 TO  LEN(A$(I)): POKE I1 +J, ASC( MID$ (A$(I),J,1)): NEXT : NEXT 
  167. 4380 A$ = Q$(16): POKE  -16384,0: POKE  -16368,0: FOR J = 0 TO 1E +20: VTAB 24: HTAB 1: PRINT A$;: HTAB 1: FOR I = 1 TO 750: NEXT : CALL  -868: FOR I = 1 TO 40: IF  PEEK( -16384) < >141  THEN  NEXT : NEXT : END 
  168. 4400 I = 40: NEXT :J = 1E +21: NEXT : TEXT : HOME 
  169. 4420  ONERR  GOTO 4480
  170. 4440  VTAB 11: PRINT "   "Q$(17):A$ = Q$(21): POKE  -16384,0: POKE  -16368,0: FOR J = 0 TO 1E +20: VTAB 13: HTAB 15: PRINT A$;: HTAB 14: FOR I = 1 TO 500: NEXT : CALL  -868: FOR I = 1 TO 40: IF  PEEK( -16384) < >141  THEN  NEXT : NEXT : END 
  171. 4460 I = 40: NEXT :J = 1E +21: NEXT : PRINT : HOME : &  RUN Q$(19): END 
  172. 4480  HOME : POKE 216,0: GOTO 4420
  173. 5000  PRINT :A$ = "H" + STR$(H%) +CO$: &  RECALL A$: POKE  -16384,0: POKE  -16368,0:I1 = 1: FOR I = 1 TO P1%: IF ID$(I) < >"C"  THEN I1 = 0:I = P1%
  174. 5020  NEXT : IF   NOT I1  THEN 5040
  175. 5030  FOR I = 1 TO 5000: NEXT : IF  PEEK( -16384) = 147  THEN 5100
  176. 5035  GOTO 5060
  177. 5040  VTAB 24: HTAB 7: PRINT Q$(18);: HTAB 1: FOR I = 1 TO 750: NEXT : CALL  -868: FOR I = 1 TO 25: IF  PEEK( -16384) < >155  AND  PEEK( -16384) < >141  AND  PEEK( -16384) < >147  THEN  NEXT : GOTO 5040
  178. 5050 I = 25: NEXT :I =  PEEK( -16384): POKE  -16384,0: POKE  -16368,0: IF I = 155  THEN  GOSUB 20000: POKE  -16300,0: POKE  -16303,0: GOTO 5040
  179. 5055  IF I = 147  THEN 5100
  180. 5060  POKE 230,32: CALL 3120: ON WF% GOSUB 1400: CALL 3099: POKE  -16304,0: POKE  -16302,0: GOTO 2000
  181. 5100  IF H% >17  THEN 5060
  182. 5105  VTAB 24: HTAB 7: PRINT "REALLY SAVE GAME (Y OR N)";: POKE  -16368,0: POKE  -16384,0
  183. 5110  GET A$: IF A$ = "N"  THEN 5040
  184. 5120  IF A$ < >"Y"  THEN 5110
  185. 5130  TEXT : HOME : VTAB 10: PRINT "MAKE SURE THE UTILITY SIDE OF THE GOLF  DISK IS IN THE DRIVE BEFORE PRESSING    THE <RETURN> KEY ";: FLASH : PRINT " ";: POKE  -16384,0: POKE  -16368,0
  186. 5140  IF  PEEK( -16384) < >141  THEN 5140
  187. 5150  ONERR  GOTO 5130
  188. 5160  &  GOTO "SAVE.GAME"
  189. 5170  END 
  190. 6000 T$ = "N": IF YO%(H%) <249  THEN AX% = HX%(H%):AY% = HY%(H%): GOTO 6080
  191. 6020  IF T%(PL%) = 1  THEN AX% = AP%(H%,0):AY% = AP%(H%,1): GOTO 6080
  192. 6040  IF YD(PL%) <C%(PL% -1,2,1)  OR YO%(H%) <470  THEN AX% = HX%(H%):AY% = HY%(H%): GOTO 6080
  193. 6060 AX% = AP%(H%,2):AY% = AP%(H%,3)
  194. 6080  GOSUB 260:AP%(0,0) = HX%(H%):AP%(0,1) = HY%(H%):HX%(H%) = AX%:HY%(H%) = AY%:D2 =  SQR((XL(PL%) -AX%) ^2 +(YL(PL%) -AY%) ^2):AP%(0,2) = YD(PL%):YD(PL%) = D2: GOSUB 160:DI% = DR%(PL%):WX% = 0:WZ% = 0: IF WF% = 1  AND YD(PL%) *SC(H%) >50  THEN  GOSUB 1180
  195. 6100 HX%(H%) = AP%(0,0):HY%(H%) = AP%(0,1):YD(PL%) = AP%(0,2):D = (D2 -WZ%) *SC(H%):K = WX% *SC(H%):WZ% = WZ% *SC(H%):S = C%(PL% -1,0,1) +WZ%
  196. 6120  IF S >YD(PL%)  THEN S = YD(PL%)
  197. 6140  IF YD(PL%) >50 GOTO 6200
  198. 6150  IF CO%(PL%) = 3  OR CO%(PL%) = 7  OR CO%(PL%) = 15  THEN CL% = 17: GOSUB 321:I = 0:DE = 0: GOTO 6720
  199. 6160  GOSUB 340:D2 = YD(PL%)/SC(H%):S = D2/25 -.0001:D1 = DI% *RA:I1 = 1:E1 =  COS(D1):E2 =  SIN(D1): FOR I = 13 TO 25:D0 = I *S:X% = XL(PL%) +D0 *E1:Y% = YL(PL%) +D0 *E2: CALL 3096:CO =  PEEK(5): IF CO = 3  OR CO = 7  OR CO = 6  THEN I1 = 0:I = 25
  200. 6180  NEXT :DE = 0:CL% = 14 +I1:I = 0: GOTO 6720
  201. 6200 CL% = 14: FOR I = 1 TO 14: IF C%(PL% -1,I,1) >D GOTO 6240
  202. 6220 CL% = I:I = 14
  203. 6240  NEXT : FOR I = 0 TO 2: FOR J = 0 TO 3:CS(I,J) = 20000: NEXT : NEXT :I1 = 1:D = C%(PL% -1,CL%,1) +WZ%: IF CL% = 14  THEN D = S
  204. 6260 D1 = DI% *RA: GOSUB 6580:I9 = D0:DE = DI%:DV = DI%
  205. 6280 DV = DV -1: IF DV <0  THEN DV = DV +360
  206. 6300 D1 = DV *RA: GOSUB 6580: IF D0 <I9  THEN I9 = D0:DE = DV: GOTO 6280
  207. 6320 DV = DI%
  208. 6340 DV = DV +1: IF DV >360  THEN DV = DV -360
  209. 6360 D1 = DV *RA: GOSUB 6580: IF D0 <I9  THEN I9 = D0:DE = DV: GOTO 6340
  210. 6380 DI% = DE:I1 = 0:J = 0: FOR I = CL% -1 TO CL% +1: IF I = 0  OR I = 15 GOTO 6540
  211. 6400 CS(J,0) = I:CS(J,1) = DI%:D = C%(PL% -1,I,1) +WZ%: IF I = 14  THEN D = S
  212. 6420 D1 = DI% *RA: GOSUB 6580:CS(J,2) = D0:DV = DI%
  213. 6440 DV = DV -1: IF DV <0  THEN DV = DV +360
  214. 6460 D1 = DV *RA: GOSUB 6580: IF D0 <CS(J,2)  THEN CS(J,2) = D0:CS(J,1) = DV: GOTO 6440
  215. 6480 DV = DI%
  216. 6500 DV = DV +1: IF DV >360  THEN DV = DV -360
  217. 6520 D1 = DV *RA: GOSUB 6580: IF D0 <CS(J,2)  THEN CS(J,2) = D0:CS(J,1) = DV: GOTO 6500
  218. 6540 J = J +1: NEXT :J = 1: FOR I = 0 TO 2  STEP 2: IF CS(I,2) <CS(J,2)  THEN J = I
  219. 6560  NEXT : GOTO 6700
  220. 6580 D2 = D: GOSUB 6680:CO = 8: IF X >1  AND Y >1  AND X <278  AND Y <190  THEN  CALL 3096:CO =  PEEK(5)
  221. 6600 D0 =  SQR((X -AX%) *(X -AX%) +(Y -AY%) *(Y -AY%)) *SC(H%): IF I1  THEN  RETURN 
  222. 6620 D0 = D0 +CF%(CO):D2 = D *C%(PL% -1,I,4)/25: GOSUB 6680:CO = 8: IF X >1  AND Y >1  AND X <278  AND Y <190  THEN  CALL 3096:CO =  PEEK(5)
  223. 6640  IF CO = 0  OR CO = 2  THEN CO = 1
  224. 6660 D0 = D0 +CF%(CO): RETURN 
  225. 6680 X = XL(PL%) +( COS(D1) *D2 + COS(D1 + SGN(K) *PI/2) * ABS(K))/SC(H%):X% = X:Y = YL(PL%) +( SIN(D1) *D2 + SIN(D1 + SGN(K) *PI/2) * ABS(K))/SC(H%):Y% = Y: RETURN 
  226. 6700 CL% = CS(J,0):DI% = CS(J,1):DE = 0:I = 0: IF CL% = 1  AND T%(PL%) < >1  THEN I = 1
  227. 6720 Q$ = Q$(7) +CL$(CL% +I): CALL 3072:LN% = LN% +8:Q$ = Q$(8) + STR$(DR%(PL%)) +Q$(20) + STR$(DI%): CALL 3072:LN% = LN% +8:Q$ = Q$(9) +Q$(10): CALL 3072: FOR I = 1 TO 1500: NEXT : RETURN 
  228. 7000 J =  RND(1):I = PD%: IF I >2  THEN 7060
  229. 7020 A$ = "3": IF J >.85  THEN A$ = "1"
  230. 7040  RETURN 
  231. 7060  IF I >5  THEN 7120
  232. 7080 A$ = "3": IF J >.5  THEN A$ = "1"
  233. 7100  RETURN 
  234. 7120  IF I >10  THEN 7200
  235. 7140 A$ = "1": IF J >.85  THEN A$ = "3"
  236. 7160  IF J <.001  THEN A$ = "2"
  237. 7180  RETURN 
  238. 7200  IF I >16  THEN 7280
  239. 7220 A$ = "1": IF J >.9  THEN A$ = "3"
  240. 7240  IF J <.01  THEN A$ = "2"
  241. 7260  RETURN 
  242. 7280  IF I >24  THEN 7360
  243. 7300 A$ = "1": IF J >.95  THEN A$ = "3"
  244. 7320  IF J <.05  THEN A$ = "2"
  245. 7340  RETURN 
  246. 7360  IF I >35  THEN 7440
  247. 7380 A$ = "1": IF J >.975  THEN A$ = "3"
  248. 7400  IF J <.25  THEN A$ = "2"
  249. 7420  RETURN 
  250. 7440  IF I >50  THEN 7520
  251. 7460 A$ = "1": IF J >.99  THEN A$ = "3"
  252. 7480  IF J <.3  THEN A$ = "2"
  253. 7500  RETURN 
  254. 7520  IF I >75  THEN 7600
  255. 7540 A$ = "2": IF J >.999  THEN A$ = "3"
  256. 7560  IF J <.35  THEN A$ = "1"
  257. 7580  RETURN 
  258. 7600 A$ = "2": IF J >.9995  THEN A$ = "3"
  259. 7620  IF J <.25  THEN A$ = "1"
  260. 7640  RETURN 
  261. 10000  REM ==>ERROR HANDLING
  262. 10020  IF  PEEK(222) = 1  THEN  VTAB 24: HTAB 1: PRINT "<CTRL-G>YOU HAVE THE WRONG DISK<CTRL-G>!";: FOR I = 1 TO 2000: NEXT I: PRINT : PRINT "INSERT PROPER DISK AND PRESS <RETURN>";: GET A$: PRINT : GOTO 5000
  263. 10200  TEXT : HOME :EN =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256: PRINT "PROGRAM ERROR NUMBER ";EN: PRINT "IN LINE NUMBER ";EL: PRINT "PROGRAM ABORTED.....": END 
  264. 20000  POKE  -16303,0: POKE  -16299,0: FOR I = 5 TO 18:J = 40 * INT((I -1)/8) +128 *(8 *((I -1)/8 - INT((I -1)/8))) +2048:K = I -4: IF K = 14  THEN K = 0
  265. 20020 CL$ = "  " + STR$(C%(PL% -1,K,1)):CL$ =  RIGHT$(CL$,3): FOR K = 0 TO 2: POKE J +16 +K, ASC( MID$ (CL$,K +1,1)) +128: NEXT : NEXT : POKE  -16368,0
  266. 20040  IF  PEEK( -16384) <128  THEN 20040
  267. 20060  POKE  -16304,0: POKE  -16300,0: POKE  -16368,0: RETURN