Home » Archimedes archive » Games » Holed Out 2 - Designer (1989)(The Fourth Dimension).adf » H3D
H3D
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Games » Holed Out 2 - Designer (1989)(The Fourth Dimension).adf |
| Filename: | H3D |
| Read OK: | ✔ |
| File size: | CBFB bytes |
| Load address: | FFFFFB41 |
| Exec address: | EF8FC5CC |
File contents
10REM >!DESIGNER.HOLEDOUT3D
20REM PROGRAMMED BY G.J.KEY BETWEEN 16-10-89 AND 20-10-89
30REM (C) THE FOURTH DIMENSION
40REM
50SYS"Hourglass_Smash"
60REM*FX229,1
70REM*FX200,2
80DIM OB%(6),OB$(6),TRX%(96),TRY%(96),HX%(30,30),HY%(30,30),CO%(30),PTS%(30)
90PROCpointer:PROCinitiate
100PROCinstruct
110*FX229
120REMONERROR
130PROCcolours(12)
140*SCHOOSE SCREEN
150*CHANNELVOICE 1 BELL
160PLOT&ED,0,0
170TIME=0
180*FX15
190REPEAT:MOUSEX%,Y%,T%
200IFTIME>3000SOUND1,-15,300,1:TIME=0
210UNTILT%ORINKEY(10)<>TRUE
220*CHANNELVOICE 1 1
230REPEAT
240Ineditor=FALSE
250PROCgetoptions
260ONERROROFF
270REM*FX229,1
280PROCcolours(12)
290Hole%=1:totscore%()=0
300FORT%=1TOnoofplayers:hsp%(T%)=T%:NEXT
310X%=0
320REPEAT
330IFX%>718ORHole%=18UNTILTRUE:UNTILFALSE
340round%=FALSE
350PROCinitcloud
360li%=RND(4)-1
370PROCgetstart
380PROCinitwind
390PROCsetplayer
400REPEAT
410PROCwhichplayer
420IFround%UNTILTRUE:PROCboard:UNTILFALSE
430PROCgetplayvals
440PROClight
450PROCsine(X%,Y%)
460PROCdrawscreen
470PROCspot
480MOVEmx%(g%,Hand%),my%(g%):MOVEBY120,176
490*SGET PLAIN
500*SCHOOSE BALL1
510PLOT&ED,xs%,ys%
520MOVEmx%(g%,Hand%),my%(g%):MOVEBY120,176
530*SGET BLACK
540*SCHOOSE 20
550ba%=sty%=y1%:GCOL8,0
560IFba%PLOT&ED,bag%(Hand%),-754
570REPEAT
580VDU23,27;m%(1,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%)
590PROCgetinfo
600D%=FALSE:B%=FALSE
610W%=TRUE:K%=FALSE
620PROCwalter
630PROCflight
640IFABSsx%>640PROCchofsc
650IFNOTW%PROCsplash:UNTILFALSE:ELSEUNTILTRUE
660PROCputback
670UNTILFALSE
680REM
690
700DEFPROCedit
710exit=FALSE:BEATS20
720island=412
730REMCourse$="EDITOR"
740LOCALflag,mem,len,par,NO%,NT%,ob%,closed:REM,PTS%(),HX%(),HY%(),CO%(),TRX%(),TRY%(),OB%(),OB$():DIM OB%(6),OB$(6),TRX%(96),TRY%(96),HX%(20,20),HY%(20,20),CO%(20),PTS%(20),sx%,sy%
750OB%(0)=9:OB$(0)="ROUGH "
760OB%(1)=7:OB$(1)="FAIRWAY"
770OB%(2)=5:OB$(2)="GREEN "
780OB%(3)=2:OB$(3)="BUNKER "
790OB%(4)=4:OB$(4)="PATH "
800OB%(5)=6:OB$(5)="WATER "
810OB%(6)=&107:OB$(6)="TEE "
820REPEAT
830closed=TRUE
840PROCsetmainv
850mappoint%=0:map?(mappoint%+&2F8)=1
860len=500:par=4:PROCstartup
870PROCgrid
880REPEAT
890PROCchooseob
900IFmem<10VDU7:UNTIL0
910IFexit UNTILTRUE:UNTILTRUE:ENDPROC
920mem-=2
930PROCbutt(0)
940PROCgetcent
950PROCreq("DRAW OUTLINE")
960COLOUR8:PRINTTAB(0,2)"LEFT BUTTON TO FIX THE LOCATION OF A POINT"
970PRINT"RIGHT BUTTON TO JOIN ENDS TO COMPLETE THE OBJECT AND EXIT":COLOUR13
980sx%=-HY%(NO%,0)*1.5:sy%=-HX%(NO%,0)*1.5
990REMMOVE-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5
1000REPEAT
1010COLOUR134:COLOUR12:VDU28,0,31,79,0:PRINTTAB(62,1);~mem;" ":COLOUR13:COLOUR139:VDU28,1,30,78,25
1020PROCmou
1030GCOL3,13
1040LINEsx%,sy%,X%,Y%
1050WAIT:WAIT
1060LINEsx%,sy%,X%,Y%
1070IFY%>-368THEN
1080IFK%=4THEN
1090IF mem>=4THEN
1100GCOL0,OB%(ob%)
1110PTS%(NO%)+=1
1120MOVE-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5
1130MOVEsx%,sy%
1140PLOT85,X%,Y%
1150sx%=X%:sy%=Y%
1160PROCgrid
1170REMMOVE-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5:MOVEX%,Y%
1180HX%(NO%,PTS%(NO%))=-Y%/1.5
1190HY%(NO%,PTS%(NO%))=-X%/1.5
1200PRINTTAB(58,1);"OBJECT HAS ";PTS%(NO%);" POINTS"
1210mem-=4
1220PROCbutt(0)
1230ENDIF
1240ENDIF
1250ENDIF
1260closed=K%=1
1270IFPTS%(NO%)=20closed=TRUE
1280UNTILclosed
1290IFPTS%(NO%)>1THEN
1300PLOT85,-HY%(NO%,1)*1.5,-HX%(NO%,1)*1.5
1310NO%+=1
1320ELSE
1330mem=mem+2+4*(PTS%(NO%)+1)
1340VDU7
1350ENDIF
1360PROCredisplay
1370UNTIL0
1380ENDPROC
1390
1400DEFPROCsetmainv
1410PROCcolours(12):MOUSEON
1420REMCOLOUR3,208,160,144:REM FLESH
1430REMCOLOUR3,32,144,208:REM WATER
1440
1450COLOUR0,80,80,80
1460PROCmesbox(0,256,1279,768)
1470PROCmesbox(0,0,1279,256)
1480VDU24,16;272;1263;1007;:GCOL134:CLG
1490VDU28,1,30,78,25:COLOUR139:CLS
1500ENDPROC
1510
1520DEFPROCstartup
1530holep=1:PROCreadhole2
1540ENDPROC
1550
1560DEFPROCinputlength
1570REM*FX229,1
1580REPEAT
1590CLS
1600COLOUR8:PRINTTAB(0,2)"ACCEPTABLE RANGE IS BETWEEN 50 AND 504 YARDS"'"YOU CAN NO LONGER ABORT THE 'NEW' OPTION"CHR$7:COLOUR13
1610INPUTTAB(0,0)"PLEASE ENTER HOLE LENGTH {YARDS} "len
1620UNTILlen>49ANDlen<505
1630PROCgetpar
1640REMPROCwrimap(len)
1650mem=&2E6
1660HX%(0,0)=0
1670HY%(0,0)=len DIV2
1680HX%(0,1)=160
1690HY%(0,1)=len+40
1700HX%(0,2)=-160
1710HY%(0,2)=len+40
1720HX%(0,3)=-180
1730HY%(0,3)=-180
1740HX%(0,4)=180
1750HY%(0,4)=-180
1760CO%(0)=9
1770PTS%(0)=4
1780mem=mem-5*4-2
1790DEFPROCstartup2
1800VDU26,24,12;268;1267;1011;:CLG
1810ORIGINisland+len,640
1820COLOUR134:COLOUR12:PRINTTAB(2,1);len;" YARDS : PAR ";par;" : HOLE No. ";map?(mappoint%+&2F8);" : T X ";:P%=mappoint%+&2E8:PRINT;FNmap2 DIV21;" : T Y ";FNmap2 DIV21;" : Memory &";~mem
1830VDU28,1,30,78,25:COLOUR139:CLS
1840GCOL9
1850MOVE-HY%(0,0)*1.5,HX%(0,0)*1.5
1860FORT%=1TO4
1870MOVE-HY%(0,0)*1.5,HX%(0,0)*1.5
1880PLOT85,-HY%(0,T%)*1.5,HX%(0,T%)*1.5
1890NEXT
1900PLOT85,-HY%(0,1)*1.5,HX%(0,1)*1.5
1910*FX229,0
1920ENDPROC
1930
1940DEFPROCgetpar
1950LOCALnpar,A%
1960*FX229
1970LOCALERROR:ONERRORLOCAL:GOTO2070
1980SYS6,229,0,255 TO ,A%
1990*FX15
2000REPEAT:CLS
2010COLOUR8:PRINTTAB(0,2)"THE CURRENT PAR IS ";par;"."'"THE ACCEPTABLE RANGE IS 2 TO 5":IFA%=0PRINT"ESCAPE TO ABORT"
2020COLOUR13:INPUTTAB(0,0)"WHAT IS THE HOLE PAR ? "npar
2030IFnpar<2ORnpar>5 VDU7
2040UNTILnpar>1ANDnpar<6
2050par=npar
2060P%=mappoint%+&2E8:PROCwrimap(0)
2070REM*FX229,1
2080ENDPROC
2090
2100DEFPROCgetcent
2110COLOUR8:PROCreq("POSITION CENTRE"):COLOUR13
2120PTS%(NO%)=0
2130REPEAT
2140PROCmou
2150IFY%>-368THEN
2160IFK%THEN
2170closed=FALSE
2180HX%(NO%,0)=-Y%/1.5
2190HY%(NO%,0)=-X%/1.5
2200ENDIF
2210ENDIF
2220UNTILclosed=FALSE
2230mem-=4
2240PROCbutt(0)
2250ENDPROC
2260
2270DEFPROCgrid
2280GCOL0,0
2290LOCALX%,Y%
2300X%=-1500
2310VDU23,6,&55,&55,&55,&55,&55,&55,&55,&55
2320REPEAT
2330MOVEX%*1.5,-384:PLOT29,X%*1.5,640
2340X%+=50
2350UNTILX%>600
2360VDU23,6,&11,&11,&11,&11,&11,&11,&11,&11
2370FORY%=-200TO200STEP50
2380MOVE-1000,Y%*1.5:PLOT29,1000,Y%*1.5
2390NEXT
2400LINE0,-384,0,640:LINE-1500,0,1000,0
2410GCOL5:CIRCLE0,0,25*1.5
2420GCOLCO%(NO%)
2430ENDPROC
2440
2450DEFPROCshsc(T%,C%)
2460IFC%COLOUR128+8:COLOUR11:ELSE COLOUR128+11:COLOUR8
2470CASET%OF
2480WHEN1:PRINTTAB(30,2) "DELETE OBJECT"
2490WHEN2:PRINTTAB(30,3)"ALTER OBJECT"
2500WHEN3:PRINTTAB(47,2)"SAVE COURSE"
2510WHEN4:PRINTTAB(64,2)"LOAD COURSE"
2520WHEN5:PRINTTAB(47,3)"READ HOLE"
2530WHEN6:PRINTTAB(64,3)"WRITE HOLE"
2540WHEN7:PRINTTAB(47,4)"ISLAND"
2550WHEN8:PRINTTAB(64,4)"'NEW' HOLE"
2560WHEN9:PRINTTAB(47,5)"INSERT TREES"CHR$30
2570WHEN10:PRINTTAB(64,5)"VIEW HOLE"CHR$30
2580WHEN11:PRINTTAB(30,4)"ALTER PAR"
2590WHEN12:PRINTTAB(30,5)"ALTER No."CHR$30
2600WHEN13:PRINTTAB(9,5)"EXIT EDITOR"CHR$30
2610ENDCASE
2620COLOUR128+11:COLOUR13
2630ENDPROC
2640
2650DEFPROCchooseob
2660dob%=TRUE
2670REPEAT
2680PROCshowcols
2690COLOUR15:PRINTTAB(2,2)"HOLED OUT COURSE DESIGNER"
2700PRINTTAB(6,3)"EDITING "Course$
2710
2720FORT%=1TO13:PROCshsc(T%,FALSE):NEXT
2730ob%=TRUE
2740odob%=1
2750obob%=0
2760REPEAT
2770*FX15
2780MOUSEX%,Y%,K%
2790IFY%+640>193ANDY%+640<224THEN
2800dob%=(X%-48+island+len)DIV176
2801IFisland<0ANDdob%>0dob%=TRUE
2810IFgreen ANDdob%=2dob%=TRUE
2820IFtee ANDdob%=6dob%=TRUE
2830IF(X%-48+island+len)MOD176>112dob%=TRUE
2840IFdob%<>TRUE PROCsc2(FALSE,dob%)
2850IFdob%<>odob%PROCsc2(TRUE,odob%):odob%=dob%
2860IFK%ANDdob%<>TRUE THEN
2870ob%=dob%
2880PROCshowchosen:GCOLOB%(ob%):VDU7
2890COLOUR12
2900ENDIF
2910ELSE
2920IFdob%<>TRUE:PROCsc2(TRUE,dob%):dob%=TRUE
2930ENDIF
2940IFob%=TRUE
2950bX%=(X%-160+island+len)
2960bob%=FALSE
2961IFY%<-574ANDY%>-606ANDbX%>610ANDbX%<800:bob%=9:IFK%PROCinserttrees:UNTILTRUE:UNTIL0
2962IFY%>-577ANDY%<-544ANDbX%>610ANDbX%<704:bob%=7:IFK%PROCdrawisland:UNTILTRUE:UNTIL0
2963IFisland<0THEN3100
2970IFY%>-577ANDY%<-544ANDbX%>334ANDbX%<480:bob%=11:IFK%PROCgetpar:PROCredisplay:UNTILTRUE:UNTIL0
2980IFY%>-606ANDY%<-574ANDbX%>334ANDbX%<480:bob%=12:IFK%PROCgetholeno:PROCredisplay:UNTILTRUE:UNTIL0
2990IFY%>-513ANDY%<-481ANDbX%>334ANDbX%<541ANDNO%>1:bob%=1:IFK%PROCdelete:UNTILTRUE:UNTIL0
3000IFY%>-545ANDY%<-512ANDbX%>334ANDbX%<526ANDNO%>1:bob%=2:IFK%PROCalter:UNTILTRUE:UNTIL0
3010IFY%>-513ANDY%<-481ANDbX%>610ANDbX%<782:bob%=3:IFK%PROCsavecourse:UNTILTRUE:UNTIL0
3020IFY%>-513ANDY%<-481ANDbX%>880ANDbX%<1056:bob%=4:IFK%PROCloadcourse:UNTILTRUE:UNTIL0
3030IFY%>-545ANDY%<-512ANDbX%>610ANDbX%<752:bob%=5:IFK%PROCreadhole:UNTILTRUE:UNTIL0
3040IFY%>-545ANDY%<-512ANDbX%>880ANDbX%<1040:bob%=6:IFK%PROCwritehole:UNTILTRUE:UNTIL0
3050IFY%<-574ANDY%>-606ANDbX%>888ANDbX%<1024:bob%=10:IFK%Ineditor=TRUE:PROCdrawmap(0):Ineditor=FALSE:VDU4:PROCsetmainv:PROCstartup2:PROCredisplay:OSCLI"FX229,1":UNTILTRUE:UNTIL0
3060REMIFY%<-574ANDY%>-606ANDbX%>610ANDbX%<800:bob%=9:IFK%PROCinserttrees:UNTILTRUE:UNTIL0
3070IFY%<-574ANDY%>-606ANDbX%>2ANDbX%<172:bob%=13:IFK%exit=TRUE:UNTILTRUE:UNTILTRUE:ENDPROC
3080IFY%>-577ANDY%<-544ANDbX%>610ANDbX%<704:bob%=7:IFK%PROCdrawisland:UNTILTRUE:UNTIL0
3090IFY%>-577ANDY%<-544ANDbX%>880ANDbX%<1040:bob%=8:IFK%PROCnewit:UNTILTRUE:UNTIL0
3100IFbob%<>obob%PROCshsc(obob%,FALSE):obob%=0
3110IFbob%PROCshsc(bob%,TRUE):obob%=bob%
3120ENDIF
3130REMPRINTTAB(0,4)Y%,X%-48+island+len;
3140UNTILob%<>TRUE
3150CO%(NO%)=OB%(ob%)
3160IFob%=6PROCdrawtee:UNTIL0
3170IFob%=2PROCdrawgreen:UNTIL0
3180UNTILTRUE
3190ENDPROC
3200
3210DEFPROCsc2(C%,dob%)
3220IFdob%=TRUE ENDPROC
3230IFC%=0AND((dob%=2ANDgreen)OR(dob%=6ANDtee))ENDPROC
3240IFC% COLOUR128+11:COLOUROB%(dob%) ELSE COLOUR128+OB%(dob%):COLOUR11
3250PRINTTAB(dob%*11+2,0)OB$(dob%);
3260COLOUR128+11:COLOUR13
3270ENDPROC
3280
3290DEFPROCdrawisland
3300island=island EOR-348
3310PROCredisplay
3320ENDPROC
3330
3340DEFPROCnewit
3350LOCALA$
3360*FX229
3370LOCALERROR:ONERRORLOCAL:GOTO3480
3380CLS
3390PRINT"NEW ---- ARE YOU SURE [Y/N] ?"CHR$7
3400COLOUR8:PRINT'"'NEW' WILL PRODUCE A BLANK HOLE TEMPLATE DESTROYING THE CURRENT HOLE DATA"'"ESCAPE TO ABORT":COLOUR13
3410*FX15
3420REPEAT:A$=INKEY$(0):UNTILA$<>"":REM BUG IN BASIC PREVENTS USE OF GET WITH A LOCAL ERROR HANDLER
3430IFA$<>"Y"ANDA$<>"y"ENDPROC
3440tee=FALSE:green=FALSE
3450PROCinputlength
3460NO%=1:NT%=TRUE
3470PROCgrid
3480REM*FX229,1
3490ENDPROC
3500
3510DEFPROCwritehole
3520LOCALgp%,tp%
3530CLS
3540PRINT"WRITING HOLE ";mappoint%DIV&300+1
3550PRINT"ARE YOU SURE [Y/N] ?"CHR$7
3560COLOUR8:PRINT'"IT IS NECCESSARY TO WRITE THE HOLE DATA INTO MEMORY"
3570PRINT"BEFORE IT CAN BE SAVED TO DISC OR BEFORE USING 'VIEW HOLE'":COLOUR13
3580*FX15
3590*FX229
3600LOCALERROR:ONERRORLOCAL:GOTO3980
3610REPEAT
3620A$=INKEY$(0)
3630UNTILA$<>""
3640IFA$<>"Y"ANDA$<>"y"GOTO3980
3650P%=0
3660PROCverify:IFP%>&2E8 VDU7:PRINT"ERROR MEMORY ABOUT TO BE OVERWRITTEN!!"'"PRESS SPACE":REPEATUNTILGET=32:GOTO3980
3670gp%=0:tp%=0
3680FORT%=1TONO%-1
3690IFCO%(T%)=&107 tp%=TRUE
3700IFCO%(T%)=5 gp%=T%
3710NEXT
3720IFgp%=FALSE CLS:COLOUR8:PRINTTAB(0,1)"THERE IS NO GREEN THEREFORE I CAN'T WRITE THIS HOLE!"'"PLEASE PRESS SPACE"CHR$7:REPEATUNTILINKEY-99:GOTO3980
3730IFtp%=FALSE CLS:COLOUR8:PRINTTAB(0,1)"THERE IS NO TEE THEREFORE I CAN'T WRITE THIS HOLE!"'"PLEASE PRESS SPACE"CHR$7:REPEATUNTILINKEY-99:GOTO3980
3740IF gp%<>NO%-1THEN
3750X%=gp%:PROCdelete2
3760PROCdrawgreen2
3770ENDIF
3780P%=mappoint%+&2E8:PROCwrimap(teeY%):PROCwrimap(teeX%)
3790P%=mappoint%
3800A%=EVAL("&"+STR$(FNdistance(teeX%,teeY%))):map?(P%+&2FA)=A%:map?(mappoint%+&2FB)=A%DIV256
3810map?(P%+&2F9)=par
3820map?(P%+&2F8)=holep MOD19-(holep>18)
3830PROCwrimap1(NT%+1)
3840FORT%=0TONT%
3850PROCwrimap(TRX%(T%))
3860PROCwrimap(TRY%(T%))
3870NEXT
3880PROCwrimap1(NO%)
3890FORT%=0TONO%-1
3900C%=CO%(T%):IFC%=2C%=1
3910PROCwrimap1(C%)
3920PROCwrimap1(PTS%(T%))
3930FORI%=0TOPTS%(T%)
3940PROCwrimap(HX%(T%,I%))
3950PROCwrimap(HY%(T%,I%))
3960NEXT
3970NEXT
3980REM*FX229,1
3990ENDPROC
4000
4010DEFPROCverify
4020P%+=1
4030FORT%=0TONT%
4040P%+=2
4050P%+=2
4060NEXT
4070P%+=1
4080FORT%=0TONO%-1
4090P%+=2
4100FORI%=0TOPTS%(T%)
4110P%+=2
4120P%+=2
4130NEXT
4140NEXT
4150ENDPROC
4160
4170DEFPROCwrimap1(A%)
4180map?P%=A%:P%+=1
4190ENDPROC
4200
4210DEFPROCwrimap(A%)
4220A%=A%*21
4230map?P%=A%:P%+=1
4240map?P%=A%>>8:P%+=1
4250ENDPROC
4260
4270DEFPROCgetholeno
4280LOCALn%
4290*FX229
4300LOCALERROR:ONERRORLOCAL GOTO4390
4310REPEAT
4320CLS
4330COLOUR8:PRINTTAB(0,2)"CURRENT HOLE No. IS ";holep'"CHANGING THE HOLE No. IS A WAY OF COPYING ONE HOLE TO ANOTHER"'"ESCAPE TO ABORT":COLOUR13
4340*FX15
4350INPUTTAB(0,0)"WHAT IS THE NEW HOLE No. {1 TO 18} ? "n%
4360UNTILn%>0ANDn%<19
4370holep=n%
4380mappoint%=(holep-1)*&300
4390REM*FX229,1
4400ENDPROC
4410
4420DEFPROCreadhole
4430*FX229
4440LOCALERROR:ONERRORLOCAL GOTO4860
4450green=FALSE:tee=TRUE
4460REPEAT
4470CLS
4480*FX15
4490COLOUR8:PRINTTAB(0,2)"THE EXISTING HOLE DATA WILL BE LOST IF IT HAS NOT BEEN WRITTEN INTO"'"MEMORY BY FIRST SELECTING THE 'WRITE HOLE' OPTION!"
4500PRINT"ESCAPE TO ABORT":COLOUR13
4510INPUTTAB(0,0)"WHICH HOLE DO YOU WISH TO EDIT {1 TO 18} "holep
4520UNTILholep>0ANDholep<19
4530DEFPROCreadhole2
4540P%=(holep-1)*&300
4550len=(VAL(STR$~((map!(P%+&2FA))AND&FFFF)))
4560par=map?(P%+&2F9)
4570mappoint%=P%
4580P%=mappoint%+&2E8:teeY%=FNmap2 DIV21:teeX%=FNmap2 DIV21
4590IFINTFNdistance(teeX%,teeY%)<>len len=INTFNdistance(teeX%,teeY%)
4600P%=mappoint%
4610mem=&2E8
4620tee=FALSE:green=FALSE
4630NT%=FNmap1-1
4640FORT%=0TONT%
4650TRX%(T%)=FNmap2 DIV21
4660TRY%(T%)=FNmap2 DIV21
4670mem-=4
4680NEXT
4690
4700NO%=FNmap1:mem-=1
4710FORT%=0TONO%-1
4720CO%(T%)=FNmap1:mem-=1
4730IFCO%(T%)=5green=TRUE
4740IFCO%(T%)=1CO%(T%)=2
4750
4760PTS%(T%)=FNmap1:mem-=1
4770FORI%=0TOPTS%(T%)
4780HX%(T%,I%)=FNmap2 DIV21
4790HY%(T%,I%)=FNmap2 DIV21
4800mem-=4
4810NEXT
4820IF CO%(T%)=7ANDPTS%(T%)=3ANDABS(HY%(T%,1)-teeX%)<45 tee=TRUE:CO%(T%)=&107
4830NEXT
4840PROCstartup2
4850PROCredisplay
4860REM*FX229,1
4870ENDPROC
4880
4890DEFPROCloadcourse
4900PROCcolours(9):PROCscreenbox
4910MOUSETO530,512:MOUSEON
4920Ineditor=TRUE
4930PROCgetcourse("EDIT")
4940Ineditor=FALSE
4950PROCcolours(12)
4960PROCsetmainv
4970mappoint%=0:map?(mappoint%+&2F8)=1
4980len=500:par=4:PROCstartup
4990PROCgrid:REM:tee=TRUE
5000MOUSEON
5010ENDPROC
5020
5030DEFPROCsavecourse
5040LOCALPointer,R0
5050DIM Pointer 28
5060$Pointer="<Obey$Dir>.MODULES.SHOOSH"
5070*FX229
5080LOCALERROR
5090ONERRORLOCALIFERR<>17:PROCredisplay:VDU26:PROCmeswind2(" "+REPORT$+" ","PLEASE","PRESS SPACE",1,3):REPEATUNTILINKEY-99:ELSEVDU24,16;272;1263;1007;:GOTO5400
5100REPEAT
5110SYS"OS_File",5,Pointer TO R0
5120IFR0<>0 THEN
5130PROCmeswind2("I CAN'T SAVE TO THE DESIGNER DISC","PLEASE INSERT ANOTHER DISC","AND PRESS SPACE",1,3)
5140REPEATUNTILINKEY-99
5150ENDIF
5160UNTILR0=0
5170ONERRORLOCAL:PROCredisplay:PROCmeswind2(" "+REPORT$+" ","PLEASE","PRESS SPACE",2,3):REPEATUNTILGET=32:PROCredisplay:IFERR=17:GOTO5400
5180*MOUNT
5190ORIGIN0,128
5200REPEAT
5210PROCcentbox(FALSE,STRING$(13," ")+"CURRENT DISC CATALOGUE"+STRING$(13," "),8,20):COLOUR8
5220VDU24,16;272;1263;1007;
5230REMGCOL128+11:CLG:GCOL128+6
5240VDU28,17,21,62,3,4
5250file$=""
5260CLS:VDU14:*.
5270VDU15:*FX15
5280PRINT'"PLEASE ENTER COURSE NAME.";
5290SYS"OS_ReadLine",Pointer,10,32,126 TO ,R0
5300IFR0=0 UNTIL0
5310Pointer?(R0+1)=13
5320file$=$Pointer
5330FORT%=1TOR0
5340IFMID$(file$,T%,1)=" " MID$(file$,T%,1)="_"
5350NEXT
5360UNTILfile$>""
5370FORT%=1TOLENfile$
5380OSCLI("SAVE $."+file$+" "+STR$~map+" +3600")
5390OSCLI("SETTYPE $."+file$+" C1F")
5400REM*FX229,1
5410PROCredisplay
5420ENDPROC
5430
5440DEFPROCinserttrees
5450REM*FX229,1
5460LOCALflag,C%
5470CLS:PROCbutt(0)
5480PRINT"INSERT OR DELETE TREES"':COLOUR8
5490PRINT"LEFT BUTTON TO INSERT"
5500PRINT"MIDDLE BUTTON TO DELETE"
5510PRINT"RIGHT BUTTON TO EXIT"
5520PRINT"MAXIMUM OF 96 TREES PER HOLE"CHR$30:COLOUR13
5530REPEAT
5540MOUSEX%,Y%,K%
5550X%=X%DIV6*6
5560Y%=Y%DIV6*6
5570C%=POINT(X%,Y%)
5580PRINTTAB(40,1);NT%+1;" TREES INSERTED"
5590PRINTTAB(40,2)"&";~mem;" BYTES LEFT "
5600IFFNdistance(-X%/1.5,-Y%/1.5)<40ANDK%=4UNTIL0
5610IF(C%=6ORC%=0)ANDK%=4UNTIL0
5620IFK%=4THEN
5630IFNT%<95THEN
5640IFmem>4THEN
5650NT%+=1
5660GCOL14
5670CIRCLEFILLX%,Y%,8
5680TRX%(NT%)=-Y%/1.5:TRY%(NT%)=-X%/1.5
5690mem-=4
5700PROCbutt(0)
5710ELSEVDU7
5720ENDIF
5730ENDIF
5740ENDIF
5750IFK%=2THEN
5760IFNT%>TRUE THEN
5770flag=FALSE
5780FORT%=0TONT%
5790IFABS(-TRY%(T%)*1.5-X%)<12ANDABS(-TRX%(T%)*1.5-Y%)<12flag=T%+1:T%=1000
5800NEXT
5810IFflag THEN
5820IFflag<>NT%+1THEN
5830FORT%=flag-1 TONT%-1
5840TRX%(T%)=TRX%(T%+1):TRY%(T%)=TRY%(T%+1)
5850NEXT
5860ENDIF
5870NT%-=1
5880mem+=4
5890PROCredisplay
5900PROCbutt(0)
5910ENDIF
5920ELSEVDU7
5930ENDIF
5940ENDIF
5950UNTILK%=1
5960PROCbutt(0)
5970*FX229,0
5980ENDPROC
5990
6000DEFPROCdrawtee
6010IFtee VDU7:ENDPROC
6020IFmem<18PRINT"NOT ENOUGH MEMORY!! PRESS SPACE:"CHR$7:REPEATUNTILGET=32:ENDPROC
6030PROCbutt(0)
6040COLOUR8:PRINTTAB(1,2)"POSITION TEE THEN ANY BUTON TO EXIT":COLOUR11
6050tee=TRUE
6060LOCALx%,y%,a%,b,c,d%,e%
6070a%=180:y%=0:x%=-len*1.5
6080MOUSETOx%,y%
6090REPEAT
6100MOUSEX%,Y%,K%
6110IFY%>y%ANDa%>160a%-=1
6120IFY%<y%ANDa%<200 a%+=1
6130x%=(COSRADa%*len)*1.5
6140y%=(SINRADa%*len)*1.5
6150MOUSETOx%,y%
6160UNTILK%
6170X%=-x%/1.5:Y%=-y%/1.5
6180HX%(NO%,0)=Y%:HY%(NO%,0)=X%
6190P%=mappoint%+&2E8:PROCwrimap(Y%):PROCwrimap(X%)
6200len=INTFNdistance(X%,Y%)
6210b=SINRADa%:c=COSRADa%
6220HX%(NO%,0)=b*-10+-c*20+Y%:HY%(NO%,0)=c*-10+b*20+X%
6230HX%(NO%,1)=b*10+-c*20+Y%:HY%(NO%,1)=c*10+b*20+X%
6240HX%(NO%,2)=b*10+-c*-20+Y%:HY%(NO%,2)=c*10+b*-20+X%
6250HX%(NO%,3)=b*-10+-c*-20+Y%:HY%(NO%,3)=c*-10+b*-20+X%
6260teeX%=X%:teeY%=Y%
6270mem-=18
6280PTS%(NO%)=3
6290NO%+=1
6300PROCredisplay
6310ENDPROC
6320
6330DEFPROCalter
6340LOCALx%,y%,x1%,y1%,x2%,y2%,x3%,y3%,flag,C%
6350*FX229
6360LOCALERROR:ONERRORLOCAL PROCredisplay:OSCLI"FX229,1":ENDPROC
6370CLS:COLOUR8:PRINTTAB(0,2)"THE OVERALL SHAPE AND POSITION OF AN OBJECT CAN BE ADJUSTED"'"BUT NOT THE NUMBER OF EDGE POINTS."'"ESCAPE TO ABORT":COLOUR13
6380REPEAT
6390PROCfindone:PROCredisplay
6400PRINTTAB(0,0)"SELECT AND MOVE POINTS TO THEIR REQUIRED POSITIONS "
6410COLOUR 8:PRINTTAB(0,4)"RIGHT BUTTON TO EXIT"'"ESCAPE TO ABORT"CHR$30:COLOUR13
6420IFCO%(X%)=5VDU7:UNTIL0
6430UNTILTRUE
6440PROCoutline
6450PROCbutt(0)
6460REPEAT
6470REPEAT
6480MOUSEx%,y%,K%
6490flag=FALSE
6500IFK%THEN
6510FORT%=0TOPTS%(X%)
6520IFABS(-HY%(X%,T%)*1.5-x%)<12ANDABS(-HX%(X%,T%)*1.5-y%)<12flag=TRUE:x%=T%
6530NEXT
6540ENDIF
6550IFK%=1UNTILTRUE:UNTILTRUE:PROCredisplay:OSCLI"FX229,1":ENDPROC
6560UNTILflag
6570x1%=-HY%(X%,x%MODPTS%(X%)+1)*1.5
6580y1%=-HX%(X%,x%MODPTS%(X%)+1)*1.5
6590T%=x%-1:IFT%<1T%=PTS%(X%)
6600x2%=-HY%(X%,T%)*1.5
6610y2%=-HX%(X%,T%)*1.5
6620x3%=-HY%(X%,x%)*1.5
6630y3%=-HX%(X%,x%)*1.5
6640GCOL3,8
6650IFx%<>0THEN
6660REPEAT
6670WAIT:WAIT
6680LINEx1%,y1%,x3%,y3%
6690LINEx3%,y3%,x2%,y2%
6700CIRCLEx3%,y3%,8
6710REPEAT
6720MOUSEx3%,y3%,K%
6730x3%=x3%DIV6*6
6740y3%=y3%DIV6*6
6750PRINTTAB(58,0)"Y ";-INT(x3%/1.5),"X ";INT(y3%/1.5);" "
6760*FX112,2
6770C%=POINT(x3%,y3%)
6780*FX112,1
6790REMIFC%<>7ANDBEAT=0:SOUND1,-15,120,4
6800IFK%=0ANDNOT((C%=7ANDisland>0)OR(island<0ANDx3%>600ANDx3%<900ANDABSy3%<220))K%=4
6810UNTILK%=0OR(C%=7ANDisland>0)OR(island<0ANDx3%>600ANDx3%<900ANDABSy3%<220)
6820LINEx1%,y1%,x3%,y3%
6830LINEx3%,y3%,x2%,y2%
6840CIRCLEx3%,y3%,8
6850UNTILK%=0
6860ELSE
6870REPEAT
6880WAIT:WAIT
6890CIRCLEx3%,y3%,8
6900REPEAT
6910MOUSEx3%,y3%,K%
6920x3%=x3%DIV6*6
6930y3%=y3%DIV6*6
6940PRINTTAB(58,0)"Y ";-INT(x3%/1.5),"X ";INT(y3%/1.5);" "
6950*FX112,2
6960C%=POINT(x3%,y3%)
6970*FX112,1
6980REMIFC%<>7ANDBEAT=0:SOUND1,-15,120,4
6990IFK%=0ANDNOT((C%=7ANDisland>0)OR(island<0ANDx3%>600ANDx3%<900ANDABSy3%<220))K%=4
7000UNTILK%=0OR(C%=7ANDisland>0)OR(island<0ANDx3%>600ANDx3%<900ANDABSy3%<220)
7010CIRCLEx3%,y3%,8
7020UNTILK%=0
7030ENDIF
7040PRINTTAB(58,0)" "
7050HY%(X%,x%)=-x3%/1.5
7060HX%(X%,x%)=-y3%/1.5
7070PROCredisplay
7080PROCoutline
7090UNTIL0
7110ENDPROC
7120
7130DEFPROCoutline
7140GCOL0,8
7150MOVE-HY%(X%,1)*1.5,-HX%(X%,1)*1.5
7160FORI%=1TOPTS%(X%)
7170DRAW-HY%(X%,I%)*1.5,-HX%(X%,I%)*1.5
7180NEXT
7190DRAW-HY%(X%,1)*1.5,-HX%(X%,1)*1.5
7200FORI%=1TOPTS%(X%)
7210CIRCLE-HY%(X%,I%)*1.5,-HX%(X%,I%)*1.5,8
7220NEXT
7230CIRCLE-HY%(X%,0)*1.5,-HX%(X%,0)*1.5,8
7240ENDPROC
7250
7260DEFPROCdelete
7270CLS
7280*FX229
7290COLOUR8:PRINTTAB(0,2)"CLICKING ON ONE OF THE RED OBJECT CENTRES WILL RESULT IN THAT OBJECTS"'"DELETION. PLEASE TAKE CARE!"'"ESCAPE TO ABORT":COLOUR13
7300LOCALERROR:ONERRORLOCAL PROCredisplay:GOTO7470
7310PROCfindone
7320DEFPROCdelete2
7330IFCO%(X%)=5green=FALSE
7340IFCO%(X%)=&107 tee=FALSE
7350mem=mem+6+PTS%(X%)*4
7360IFX%<>NO%-1THEN
7370FORT%=X%+1TONO%
7380FORI%=0TOPTS%(T%)
7390HX%(T%-1,I%)=HX%(T%,I%)
7400HY%(T%-1,I%)=HY%(T%,I%)
7410NEXT
7420CO%(T%-1)=CO%(T%)
7430PTS%(T%-1)=PTS%(T%):NEXT
7440ENDIF
7450NO%-=1
7460PROCredisplay
7470REM*FX229,1
7480ENDPROC
7490
7500DEFPROCfindone
7510LOCALERROR:ONERRORLOCAL ENDPROC
7520PRINTTAB(0,0)"THERE ARE ";NO%-1;" OBJECTS DEFINED. SELECT A CENTRE POINT"
7530GCOL8
7540FORT%=1TONO%-1
7550CIRCLE-HY%(T%,0)*1.5,-HX%(T%,0)*1.5,8
7560NEXT
7570REPEAT
7580MOUSEX%,Y%,K%
7590flag=FALSE
7600IFK%THEN
7610FORT%=1TONO%-1
7620IF(ABS(-HY%(T%,0)*1.5-X%))<12AND(ABS(-HX%(T%,0)*1.5-Y%))<12flag=TRUE:X%=T%:T%=NO%-1
7630NEXT
7640ENDIF
7650UNTILflag
7660ENDPROC
7670
7680DEFPROCredisplay
7690VDU26:*FX112,2
7700CLG:GCOL7
7710ORIGINisland+len,640
7720MOVE-HY%(0,0)*1.5,-HX%(0,0)*1.5
7730FORI%=1TOPTS%(0)
7740MOVE-HY%(0,0)*1.5,-HX%(0,0)*1.5
7750PLOT85,-HY%(0,I%)*1.5,-HX%(0,I%)*1.5
7760NEXT
7770PLOT85,-HY%(0,1)*1.5,-HX%(0,1)*1.5
7780*FX112,1
7790VDU26,24,12;268;1267;1011;4:OFF:CLG
7800ORIGINisland+len,640
7810DEFPROCredisplay2
7820COLOUR134:COLOUR12:PRINTTAB(2,1);len;" YARDS : PAR ";par;" : HOLE No. ";map?(mappoint%+&2F8);" : T X ";:P%=mappoint%+&2E8:PRINT;FNmap2 DIV21;" : T Y ";FNmap2 DIV21;" : Memory &";~mem
7830VDU28,1,30,78,25:COLOUR139:REM:CLS
7840IFNO%>0THEN
7850FORT%=0TONO%-1
7860GCOLCO%(T%)
7870MOVE-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
7880FORI%=1TOPTS%(T%)
7890MOVE-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
7900PLOT85,-HY%(T%,I%)*1.5,-HX%(T%,I%)*1.5
7910NEXT
7920PLOT85,-HY%(T%,1)*1.5,-HX%(T%,1)*1.5
7930IFCO%(T%)=&107 ORCO%(T%)=5 GCOL12:POINT-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
7940NEXT
7950ENDIF
7960IFNT%>TRUE THEN
7970GCOL14
7980FORT%=0TONT%
7990CIRCLEFILL-TRY%(T%)*1.5,-TRX%(T%)*1.5,8
8000NEXT
8010ENDIF
8020PROCgrid
8030ENDPROC
8040
8050DEFPROCdrawgreen
8060IFgreen VDU7:ENDPROC
8070IFmem<54PRINT"NOT ENOUGH MEMORY!! PRESS SPACE:"CHR$7:REPEATUNTILGET=32:ENDPROC
8080DEFPROCdrawgreen2
8090green=TRUE
8100mem-=2
8110HX%(NO%,0)=0
8120HY%(NO%,0)=0
8130mem-=4
8140CO%(NO%)=5
8150PTS%(NO%)=0
8160MOVE0,0
8170FORT%=0TO330STEP30
8180PTS%(NO%)+=1
8190mem-=4
8200MOVE0,0
8210HX%(NO%,PTS%(NO%))=SINRADT%*25
8220HY%(NO%,PTS%(NO%))=COSRADT%*25
8230PLOT85,-HY%(NO%,PTS%(NO%))*1.5,-HX%(NO%,PTS%(NO%))*1.5
8240NEXT
8250PLOT85,-HY%(NO%,1)*1.5,-HX%(NO%,1)*1.5
8260NO%+=1
8270PROCredisplay
8280ENDPROC
8290
8300DEFPROCmou
8310LOCALC%
8320REPEAT
8330MOUSEX%,Y%,K%
8340X%=X%DIV6*6
8350Y%=Y%DIV6*6
8360IFob%>2ANDob%<6THEN
8370IF(X%/1.5)<-(len-(ABS(Y%DIV6)))THEN
8380X%=-(len-(ABS(Y%DIV6)))*1.5
8390X%=X%DIV6*6
8400MOUSETOX%,Y%
8410ENDIF
8420ENDIF
8430PRINTTAB(58,0)"Y ";-INT(X%/1.5),"X ";INT(Y%/1.5);" "
8440PRINTTAB(58,2);~mem;" BYTES LEFT"
8450PRINTTAB(58,3);NO%;" OBJECTS DRAWN"
8460*FX112,2
8470C%=POINT(X%,Y%)
8480*FX112,1
8490IFC%<>7ANDK%ANDBEAT=0:SOUND1,-15,120,4
8500UNTIL(C%=7ANDisland>0)OR(ob%=0ANDisland<0ANDX%>600ANDX%<900ANDABSY%<220)
8510ENDPROC
8520
8530DEFPROCreq(A$)
8540VDU28,1,30,20,30:CLS
8550COLOUR8:PRINTA$;
8560VDU28,1,30,78,25,7
8570ENDPROC
8580
8590DEFPROCshowcols
8600CLS
8610FORT%=0TO6
8620COLOUROB%(T%):PRINTTAB(T%*11+2)OB$(T%);
8630NEXT
8640ENDPROC
8650DEFPROCshowchosen
8660CLS:COLOUROB%(ob%)
8670PRINTTAB(0,0)"DRAWING "OB$(ob%)
8680ENDPROC
8690
8700DEFPROCinstruct
8710PROCcolours(9):PROCscreenbox
8720IFFNquest("DO YOU REQUIRE INSTRUCTIONS?","YES","NO",0):PROCbutt(0):ENDPROC
8730PROCcolours(12):PROCmesbox(0,0,1279,1023)
8740GCOL12:RECTANGLE998,640,160,256
8750LINE1058,896,1066,940:DRAW1090,940:DRAW1098,896
8760GCOL139:GCOL1:FILL1078,900
8770COLOUR1,240,240,192
8780COLOUR2,240,208,208
8790COLOUR3,240,240,224
8800GCOL1:RECTANGLEFILL1000,644,156,248
8810GCOL3:RECTANGLEFILL1000,644,156,124
8820FORT%=0TO2
8830GCOL12:RECTANGLE1012+T%*50,800,32,64
8840GCOL2:RECTANGLEFILL1014+T%*50,804,28,56
8850GCOL12:MOVE1020+T%*50,850:VDU5:PRINT;T%+1
8860NEXT:VDU4:OFF
8870COLOUR139:COLOUR12
8880VDU28,2,30,78,3
8890PRINTTAB(0,0)"Game control in the Archimedes version of ";:COLOUR9:PRINT"HOLED OUT";:COLOUR12:PRINT" is via"'"the MOUSE, the keys are numbered as indicated on the right."
8900PRINT'"The differences to the instructions as shown in the manual"'"are as follows:"
8910PRINT'"STROKEPLAY/"TAB(16)"There can be up to 6 players in any round"
8920PRINT'"GAME CONTROLS/"''"1. SELECT CLUB. Use the MOUSE to indicate the club required then"TAB(16)"press any button to go to the next stage"
8930PRINT'"2. DIRECTION. Position the cursor with the MOUSE then either."
8940PRINTSPC(16)"Press [2] to go to the next stage."
8950PRINTSPC(16)"Press [1] or [3] to select another club"
8960PRINT'"3. POWER."TAB(16)"As soon as the direction has been selected by pressing [2]"
8970PRINTTAB(16)"the bar indicator will start to move."
8980PRINTTAB(16)"Pressing [2] will give a Normal shot"
8990PRINTTAB(16)"Pressing [1] will give a Hooked shot"
9000PRINTTAB(16)"Pressing [3] will give a Sliced shot"
9010PRINT'"To read courses from alternate discs simply insert the disc when in the"
9020PRINT"COURSES window and press ESCAPE."
9030PRINT'TAB(22)"PRESS ANY BUTTON TO CONTINUE"
9040PROCbutt(0)
9050REPEAT:MOUSEX%,Y%,K%:UNTILK%:SOUND1,-10,200,1
9060PROCbutt(0)
9070VDU28,2,30,78,1
9080CLS:COLOUR14
9090
9100PRINT'"Operation of the EDITOR :-"
9110COLOUR12
9120PRINT'"The main EDITOR panel consists of a plan of the hole being edited and an"
9130PRINT"Options window. The options are split into two groups."
9140PRINT'"The first contains 7 different coloured drawing options which are used to"
9150PRINT"draw the various objects on the hole {Green, Fairway, Water ect}."
9160PRINT'"The second group are all coloured red and control the EDITOR actions"
9170PRINT"{Load and Save files, Object deletion ect} all these actions have their own"
9180PRINT"Help text. The best way to discover their operation is to try them out for"
9190PRINT"yourself."
9200PRINT'"All course files are saved in the $ directory on drive :0 and it is not"
9210PRINT"possible to save files to the EDITOR disc. There are no special actions to"
9220PRINT"read or write to another disc simply insert the disc before selecting Load"
9230PRINT"or Save."
9240PRINT'"Before you can 'SAVE' a hole as part of a course or 'VIEW' a hole you must"
9250PRINT"use the 'WRITE HOLE' option to store the data into course memory."
9260PRINT'"When SAVING a course to disc you can use spaces in the file name so that"
9270PRINT"names such as 'PINE ISLES' are quite acceptable, The spaces will be replacedby underline characters when the file is saved and restored on loading."
9280PRINT''TAB(22)"PRESS ANY BUTTON TO CONTINUE"
9290PROCbutt(0)
9300REPEAT:MOUSEX%,Y%,K%:UNTILK%:SOUND1,-10,200,1
9310PROCbutt(0):CLS
9320PRINT"Operation of the EDITOR :-"
9330PRINT'"It is possible to draw one object over the top of another, so some thought"
9340PRINT"will be required when constructing a hole if the final result is to be as"
9350PRINT"you visualise it. Placing areas of water or bunkers underneath the green"
9360PRINT"can have unpredictable results so try to avoid doing this."
9370PRINT'"If you select the 'ISLAND' option it will toggle the hole plan to the left"
9380PRINT"of the screen. In this mode you will only be able to draw an island with"
9390PRINT"colour 'ROUGH' and position trees on the island. Select 'ISLAND' again to"
9400PRINT"return to the normal editing mode."
9410PRINT'"The hole plan is divided into 50 yard squares these should be used in"
9420PRINT"conjunction with the club distances on your quick reference card to ensure"
9430PRINT"that you don't draw an object that is too big to hit the ball over."
9440PRINT'"At the top of the Hole Plan, the Hole length, Par, Tee X and Tee Y "
9450PRINT"coordinates and amount of Hole memory remaining are displayed. The"
9460PRINT"X and Y coordinates are reversed from the normal convention, X being"
9470PRINT"vertical and Y horizontal, Zero being centred upon the hole."
9480PRINT"If you can't draw an object check that there is enough memory left for"
9490PRINT"the operation."
9500PRINT'"Finally you don't have to design all 18 holes before saving a course to disc"
9510PRINT"so as soon as you have created a hole you can save the course, leave the "
9520PRINT"editor with the 'EXIT EDITOR' option and test play you own holes!"
9530PRINT''TAB(22)"PRESS ANY BUTTON TO CONTINUE"
9540PROCbutt(0)
9550REPEAT:MOUSEX%,Y%,K%:UNTILK%:SOUND1,-10,200,1
9560PROCbutt(0)
9570ENDPROC
9580REM
9590DEFPROCchofsc
9600*FX112,3
9610CLS
9620IFSGNx1%=TRUE ORIGIN1280,768+O%-6166*green%:ELSEORIGIN0,768+O%-6166*green%
9630P%=rough
9640GCOLFNmap1:PROCdrawit
9650GCOLFNmap1:PROCdrawit
9660P%=water:GCOL6:PROCdrawit
9670G%=POINT(xs%,ys%)
9680IFG%=6ORG%=11W%=FALSE
9690*FX112,1
9700ENDPROC
9710REM
9720DEFPROCpreview
9730REPEAT
9740PROCcolours(9):PROCscreenbox:MOUSEON
9750lhol%=FNchoseahole
9760IFNOTlhol%PROCdrawmap(lhol%)
9770UNTILlhol%=TRUE
9780ENDPROC
9790REM
9800DEFPROCdrawmap(holeno%)
9810IFIneditor THENREM*FX229,1
9820PROCinitcloud
9830li%=2:PROCinitwind
9840LOCALr%,l%,OL%,A%,AA%,T%,I%,SP%,X%,Y%,A$
9850X%=640:Y%=512
9860REPEAT
9870P%=mappoint%+holeno%:SP%=P%
9880OL%=(VAL(STR$~((map!(P%+&2FA))AND&FFFF)))
9890AA%=FNmap1
9900FORA%=1TOAA%
9910l%=FNmap2/10.5
9920r%=FNmap2/10.5
9930x%(A%)=r%:y%(A%)=l%
9940NEXT
9950I%=FNmap1-1
9960T%=FNmap1:T%=FNmap1:P%=P%+T%*4+4
9970l%=0:r%=0:t%=0:b%=0
9980PROCcolours(12):PROCscreenbox:GCOL137
9990PROCmesbox(532-OL%,294,OL%*2+212,692)
10000VDU26,24,548-OL%;310;548+OL%+180;970;:CLG
10010ORIGIN592+OL%,640
10020FORT%=1TOI%:GCOLFNmap1
10030np%=FNmap1
10040PROCmap2(CX%,CY%,4):PROCmap2(SX%,SY%,4)
10050FORI%=1TOnp%-1:PROCmap2(XI%,YI%,85):MOVECX%,CY%:NEXT
10060PLOT85,SX%,SY%
10070NEXT:GCOL14
10080FORT%=1TOAA%:IFPOINT(-x%(T%),-y%(T%))<>6CIRCLEFILL-x%(T%),-y%(T%),8
10090NEXT:GCOL0:POINT0,0
10100VDU26
10110PROCsmallmes(144,166,12,"POSITION POINTER ON VIEWPOINT THEN PRESS THE MIDDLE BUTTON")
10120IFIneditor A$="EDITOR":ELSE:A$="HOLE SELECTOR"
10130A$="RIGHT BUTTON TO RETURN TO THE "+A$
10140PROCsmallmes(608-LENA$*8,66,12,A$)
10150MOUSEON:MOUSETOX%,Y%
10160REPEAT
10170MOUSERECTANGLE548-OL%,310,OL%*2+180,660
10180MOUSEX%,Y%,T%
10190IFX%<688THENr%=(688-X%)DIV8ELSEr%=(X%-688)DIV8
10200MOUSERECTANGLE548-OL%,310+r%,OL%*2+180,660-r%*2
10210y%=((592+OL%)-X%)DIV2
10220x%=(640-Y%)DIV2
10230
10240IFT%=4P%=SP%+&2E8:X%=FNmap2:Y%=FNmap2:PROCdisplayview2(X%,Y%,SP%):UNTILTRUE:UNTILFALSE
10250IFT%=2PROCdisplayview(X%,Y%,SP%):UNTILTRUE:UNTILFALSE
10260UNTILT%:UNTILTRUE
10270ENDPROC
10280REM
10290DEFPROCdisplayview(X%,Y%,SP%)
10300YY%=(((592+OL%)-X%)DIV2)*21
10310X%=((640-Y%)DIV2)*21
10320MOUSEOFF
10330LOCALA$,mappoint%:mappoint%=SP%
10340DEFPROCdisplayview2(X%,YY%,SP%)
10350IFABSX%<42ANDABSYY%<42X%=42:YY%=42
10360OL%=(FNdistance(X%,YY%)):green%=(OL%<525):OL%=OL%/21
10370A$=Course$+" HOLE "+STR$(holeno%DIV&300+1)+", "
10380IFgreen% A$=A$+STR$(OL%*3)+" FEET":ELSEA$=A$+STR$OL%+" YARDS"
10390A$=A$+" FROM HOLE"
10400PROClight
10410PROCsine(X%,Y%)
10420PROCdrawscreen
10430VDU26:X%=640-LENA$*8-24:PROCsmallmes(X%,860,13,A$)
10440PROCbutt(0)
10450REPEATMOUSEX%,Y%,SP%:UNTILSP%
10460PROCbutt(0)
10470ENDPROC
10480REM
10490DEFPROCmap2(RETURN x%,RETURN y%,p%)
10500y%=-FNmap2/10.5:x%=-FNmap2/10.5
10510PLOTp%,x%,y%
10520ENDPROC
10530REM
10540DEFFNchoseahole
10550PROCbutt(0)
10560LOCALX%,Y%,K%,F%,N%,out%
10570PROCcentbox(TRUE,"PLEASE SELECT A HOLE",12,10)
10580PROCmesbox(464,444,148,100):PROCdono2(1)
10590PROCmesbox(704,536,80,80)
10600PROCsmallmes(704,462,12,"EXIT")
10610PROCmesbox(704,368,80,80)
10620GCOL15:MOVE744,600:MOVE720,554:PLOT85,768,554
10630MOVE744,388:MOVE720,432:PLOT85,768,432:LINE720,436,768,436
10640GCOL8:LINE720,432,744,388:DRAW768,432
10650LINE720,558,744,600:DRAW768,558
10660MOUSERECTANGLE480,388,432,220
10670N%=1:REPEAT:MOUSEX%,Y%,K%
10680IFK%THEN
10690IFX%>716THEN
10700IFX%<772THEN
10710IFY%>544N%=N%MOD18+1:PROCdono2(N%):SOUND1,-10,200,1:PROCbutt(0)
10720IFY%<442N%-=1:N%=N%-(N%=0)*18:PROCdono2(N%):SOUND1,-10,200,1:PROCbutt(0)
10730ENDIF
10740IFY%>472ANDY%<516out%=TRUE:F%=TRUE:SOUND1,-10,200,1
10750ENDIF
10760IFX%<604THEN
10770IFY%>456ANDY%<540F%=TRUE
10780ENDIF
10790ENDIF
10800UNTILF%=TRUE
10810=((N%-1)*&300)ORout%
10820REM
10830DEFPROCdono2(A%)
10840LOCALA$,T%:A$=STR$(A%)
10850GCOL11:RECTANGLEFILL476,464,124,64
10860MOVE476-32*(A%<10),520
10870GCOL12:FORT%=1TOLENA$:PROCdouble(VAL(MID$(A$,T%,1))):NEXT
10880ENDPROC
10890REM
10900DEFPROCgetoptions
10910FORT%=1TO6:jump%(T%)=T%:NEXT
10920*CHANNELVOICE 1 1
10930REPEAT:REPEAT
10940PROCcolours(9):PROCscreenbox
10950MOUSETO640,496
10960IFFNquest("EDIT HOLES OR PLAY ROUND?","PLAY","EDIT",0)PROCgetcourse("EDIT"):PROCedit:OSCLI"FX229":UNTILFALSE
10970PROCbutt(0):*FX229
10980mappoint%=0:PROCgetcourse("PLAY"):mapstart%=map+mappoint%
10990IFFNquest("PREVIEW HOLES OR PLAY ROUND?","PLAY","PREVIEW",0)PROCpreview:UNTILFALSE:ELSEUNTILTRUE
11000play%=FNquest("UNDER WHICH RULES ARE YOU TO PLAY?","MATCH PLAY","STROKE PLAY",0)+1:REM 1=MATCH 2=STROKE
11010noofplayers=FNnoplaying
11020FORT%=1TOnoofplayers
11030PROCgetname(T%)
11040hand%(T%)=1-FNquest("IS "+name$(T%)+" LEFT OR RIGHT HANDED?","LEFT","RIGHT",0)
11050PROCgetskill(T%)
11060NEXT
11070IFFNconfirm(noofplayers)UNTIL0
11080UNTILTRUE
11090REM CHANGE THE FOLLOWING NUMBER TO (HOLE NO. -1)*&300
11100REMmappoint%=&2400
11110ENDPROC
11120
11130DEFPROCgetcourse(E$)
11140LOCALN%,I%,T%,C%,C$,E%,X,Y,Z
11150*FX21,9
11160PROCbutt(0):*FX229
11170LOCALERROR:ONERRORLOCAL:IFERR<>17PROCcentbox(TRUE," "+REPORT$+" ",8,1):ORIGIN0,-256:PROCcentbox(FALSE,"PLEASE PRESS SPACE",8,1):ORIGIN0,0:REPEATUNTILINKEY-99:ELSEIFIneditor:OSCLI"FX229,1":ENDPROC
11180*FX15
11190C%=1:E%=-368:I%=0
11200REPEAT
11210PROCreaddir
11220IFI%=0THEN
11230*FX15
11240PROCcentbox(TRUE,"NO COURSES ON THIS DISC!",5,1):VDU7:N%=INKEY(300)
11250ORIGIN0,-256:PROCcentbox(FALSE,"PLEASE PRESS SPACE",8,1):ORIGIN0,0:REPEATUNTILINKEY-99
11260ENDIF
11270UNTILI%<>0
11280N%=((I%+1)DIV2*36)DIV32
11290PROCcentbox(TRUE,"COURSES AVAILABLE TO "+E$,5,N%+2)
11300T%=512-I%DIV2*18
11310MOUSERECTANGLE272,T%-24,736,I%*18
11320FORN%=1TOI%
11330PROCshowcat(N%,8+(N%=1)*2)
11340NEXT
11350OX=1
11360REPEAT
11370MOUSEX,Y,Z
11380X=-(X>640)+((T%-20+I%*18)-Y)DIV36*2+1
11390IFX>I%X=I%
11400IFX<>OX PROCshowcat(OX,8):PROCshowcat(X,6):OX=X
11410UNTILZ
11420Course$=FNno_s(F$(X))
11430OSCLI"L. $."+F$(X)+" "+STR$~map
11440REM*FX229,1
11450ENDPROC
11460
11470DEFPROCshowcat(N%,C%)
11480VDU5
11490LOCALE%
11500IFN%AND1 E%=-368:ELSE E%=48
11510GCOL3+C%
11520RECTANGLEFILL640+E%,T%+I%*18-16-((N%+1)DIV2)*36,320,32
11530GCOLC%
11540MOVE640+E%,T%+I%*18+12-((N%+1)DIV2)*36
11550PRINTFNno_s(F$(N%))
11560ENDPROC
11570
11580DEFFNno_s(C$)
11590LOCALT%
11600FORT%=1TOLENC$
11610IFMID$(C$,T%,1)="_"MID$(C$,T%,1)=" "
11620NEXT
11630=C$
11640
11650DEFPROCreaddir
11660LOCALR4,T%,C%,name,Point,buffer,filetype
11670*MOUNT
11680DIM Point 11,buffer 34,name 2
11690$name="*":filetype=&C1F
11700$Point="$"+CHR$0:R4=0
11710REPEAT
11720SYS"OS_GBPB",10,Point,buffer,77,R4,34,name TO ,,,,R4
11730IFbuffer!&10=1AND((!buffer>>8)AND&FFF)=filetype THEN
11740I%+=1:T%=&14
11750REPEAT
11760C%=buffer?T%
11770T%-=(C%<>0)
11780UNTILT%=&1EORC%=0
11790buffer?T%=13
11800F$(I%)=$(buffer+&14)
11810ENDIF
11820UNTILR4=-1
11830ENDPROC
11840
11850REM
11860DEFFNconfirm(T%)
11870LOCALN%,I%,A$:I%=(T%+(T%AND1))
11880PROCbutt(0)
11890PROCcolours(12):PROCscreenbox
11900PROCcentbox(FALSE," ARE THE FOLLOWING GAME OPTIONS CORRECT? ",15,10+I%)
11910VDU28,10,20+I%DIV2,69,13-I%DIV2,4:OFF
11920COLOUR12:COLOUR139:PRINT;T%;" PLAYER";
11930IFT%<>1PRINT"S";
11940PRINT", PLAYING AT ";Course$;", UNDER ";
11950CASEplay%OF
11960WHEN1:PRINT"MATCH";
11970WHEN2:PRINT"STROKE";
11980ENDCASE
11990PRINT" PLAY RULES"
12000PRINTTAB(0,1)STRING$(60,"-")
12010COLOUR6:PRINTTAB(0,2)"NAME"TAB(22)"DEXTERITY"TAB(46)"SKILL":COLOUR12
12020PRINTTAB(0,3)STRING$(60,"-")
12030PRINTTAB(0,4);
12040PROCboardcol
12050FORN%=1TOT%
12060COLOURN%+4
12070PRINTname$(N%)TAB(22);
12080CASEhand%(N%)OF
12090WHEN0:PRINT"RIGHT";
12100WHEN1:PRINT"LEFT";
12110ENDCASE
12120PRINT" HANDED"TAB(46);
12130A$=FNskillname(currents%(N%))
12140PRINTA$
12150NEXT
12160COLOUR12:PRINTSTRING$(60,"-")
12170PROCsmallmes(520,368-I%*16,8,"YES")
12180PROCsmallmes(680,368-I%*16,8,"NO")
12190MOUSERECTANGLE536,376-I%*16,208,44:MOUSE ON
12200REPEAT
12210MOUSEX%,Y%,K%
12220UNTIL(X%<590ORX%>692)ANDK%
12230SOUND1,-10,200,1
12240=X%>692
12250ENDPROC
12260REM
12270DEFPROCboardcol
12280COLOUR5,208,0,0
12290COLOUR6,144,128,80
12300COLOUR7,112,112,112
12310COLOUR8,240,112,0
12320COLOUR9,96,96,48
12330COLOUR10,208,80,144
12340ENDPROC
12350REM
12360DEFPROCgetskill(T%)
12370PROCbutt(0)
12380LOCALX%,Y%,K%,F%,N%
12390PROCcentbox(TRUE,"WHAT IS "+name$(T%)+"S SKILL LEVEL?",15,12)
12400PROCmesbox(356,464,416,64):PROCdoskill(currents%(T%))
12410PROCmesbox(820,540,80,80)
12420PROCmesbox(820,372,80,80)
12430GCOL15:MOVE860,604:MOVE836,558:PLOT85,884,558
12440MOVE860,388:MOVE836,432:PLOT85,884,432:LINE836,436,884,436
12450GCOL8:LINE836,432,860,388:DRAW884,432
12460LINE836,562,860,604:DRAW884,562
12470MOUSERECTANGLE372,388,514,220
12480N%=1:REPEAT:MOUSEX%,Y%,K%
12490IFK%THEN
12500IFX%>836THEN
12510IFY%>544ANDN%<4N%+=1:PROCdoskill(N%):SOUND1,-10,200,1:PROCbutt(0)
12520IFY%<442ANDN%>1N%-=1:PROCdoskill(N%):SOUND1,-10,200,1:PROCbutt(0)
12530ENDIF
12540IFX%<780THEN
12550IFY%>475ANDY%<514F%=TRUE
12560ENDIF
12570ENDIF
12580UNTILF%=TRUE
12590SOUND1,-10,200,1
12600currents%(T%)=N%
12610ENDPROC
12620REM
12630DEFPROCdoskill(T%)
12640LOCALA$
12650A$=FNskillname(T%)
12660GCOL11:RECTANGLEFILL372,480,12*32,32
12670GCOL12:MOVE372,508:PRINTA$
12680ENDPROC
12690REM
12700DEFFNskillname(T%)
12710LOCALA$
12720CASET%OF
12730WHEN1:A$="BEGINNER"
12740WHEN2:A$="ENTHUSIAST"
12750WHEN3:A$="AMATEUR"
12760WHEN4:A$="PROFESSIONAL"
12770ENDCASE
12780=A$
12790REM
12800DEFPROCgetname(T%)
12810PROCbutt(0)
12820LOCALX%,Y%,K%,Q,OX%,OY%,A$,B$:A$=name$(T%)
12830IFnoofplayers>1THEN
12840CASET%OF
12850WHEN1:B$="FIRST "
12860WHEN2:B$="SECOND "
12870WHEN3:B$="THIRD "
12880WHEN4:B$="FOURTH "
12890WHEN5:B$="FIFTH "
12900WHEN6:B$="SIXTH "
12910ENDCASE
12920ENDIF
12930IFLENA$<10A$=A$+STRING$(10-LENA$," ")
12940PROCcentbox(TRUE,"WHAT IS THE "+B$+"PLAYERS NAME?",15,8)
12950MOUSERECTANGLE306,480,634,48
12960PROCsmallmes(784,472,11,"OK")
12970PROCsmallmes(288,472,11,A$)
12980MOUSEOX%,OY%,K%:TIME=1000
12990REPEAT
13000PROCbutt(0)
13010A$=name$(T%)
13020MOVE336,516:PRINTA$;
13030GCOL139:*FX21
13040REPEAT
13050Q=INKEY(0):IFQ<>TRUE OR(X%<702ANDK%) TIME=0:MOUSEOX%,OY%,K%:MOUSEOFF
13060IFQ<>127Q=Q AND223
13070IF(Q>64ANDQ<91)ORQ=127THEN
13080IFLENA$<>10ANDQ<>127A$=A$+CHR$Q:VDUQ:SOUND1,-10,200,1
13090IFLENA$<>0ANDQ=127A$=LEFT$(A$,LENA$-1):VDUQ:SOUND1,-10,200,1
13100ENDIF
13110MOUSEX%,Y%,K%
13120IFTIME>500ORABS(X%-OX%)>8ORABS(Y%-OY%)>8MOUSEON
13130UNTIL(X%>792ANDK%)ORQ=13
13140IFA$=""SOUND1,-15,125,20:name$(T%)=defname$(T%):TIME=0:UNTILFALSE
13150SOUND1,-10,200,1:UNTILTRUE
13160GCOL140:name$(T%)=A$
13170defname$(T%)=A$
13180ENDPROC
13190REM
13200DEFFNnoplaying
13210PROCbutt(0)
13220IFplay%=1THEN=2
13230LOCALX%,Y%,K%,F%,N%
13240PROCcentbox(TRUE,"HOW MANY PLAYERS?",12,10)
13250PROCmesbox(464,444,84,100):PROCdono(1)
13260PROCmesbox(704,536,80,80)
13270PROCmesbox(704,372,80,80)
13280GCOL15:MOVE744,600:MOVE720,554:PLOT85,768,554
13290MOVE744,388:MOVE720,432:PLOT85,768,432:LINE720,436,768,436
13300GCOL8:LINE720,432,744,388:DRAW768,432
13310LINE720,558,744,600:DRAW768,558
13320MOUSERECTANGLE480,384,292,220
13330N%=1:REPEAT:MOUSEX%,Y%,K%
13340IFK%THEN
13350IFX%>716THEN
13360IFY%>544ANDN%<6N%+=1:PROCdono(N%):SOUND1,-10,200,1:PROCbutt(0)
13370IFY%<442ANDN%>1N%-=1:PROCdono(N%):SOUND1,-10,200,1:PROCbutt(0)
13380ENDIF
13390IFX%<540THEN
13400IFY%>456ANDY%<540F%=TRUE
13410ENDIF
13420ENDIF
13430UNTILF%=TRUE
13440SOUND1,-10,200,1
13450=N%
13460REM
13470DEFPROCdono(A%)
13480GCOL11:RECTANGLEFILL476,468,60,64
13490MOVE476,520
13500GCOL12:PROCdouble(A%)
13510ENDPROC
13520REM
13530DEFFNquest(A$,B$,C$,H%)
13540LOCALL%,D%,R%
13550R%=704+FNlength(LENC$)
13560L%=600-FNlength(LENB$)
13570PROCcentbox(TRUE,A$,12,6+H%)
13580D%=464-H%*32
13590PROCsmallmes(L%,D%,11,B$)
13600PROCsmallmes(704,D%,11,C$)
13610MOUSERECTANGLEL%+16,D%+8,R%-L%-64,48
13620MOUSE ON
13630PROCbutt(0)
13640REPEAT:MOUSEL%,R%,D%
13650UNTILD%AND(L%<568ORL%>712)
13660SOUND1,-10,200,1
13670D%=-(L%>712)
13680=D%
13690REM
13700DEFFNlength(L%)
13710L%+=3:IF(L%AND1)-0L%+=1
13720=L%*32
13730REM
13740DEFPROCdouble(C%)
13750C%=128+4*C%
13760VDUC%,C%+1,8,8,10,C%+2,C%+3,11
13770ENDPROC
13780REM
13790DEFPROCscreenbox
13800LOCALM%:M%=MODEDIV6
13810PROCmesbox(0,0,1279,1023)
13820VDU24,16;16;1263;1007;:GCOL140:CLG
13830DEFPROCtextwind
13840VDU28,1,30,38*M%,1:COLOUR140:CLS
13850ENDPROC
13860REM
13870DEFPROCcentbox(cls,A$,C%,H%)
13880IFcls CLS
13890LOCALT%,I%,M%
13900IFMODE=9M%=16ELSEM%=8
13910T%=640-LENA$*M%
13920I%=512+H%*16
13930PROCmesbox(T%-M%,496-H%*16-20*(H%=1),LENA$*M%*2+M%*2,H%*32+32)
13940GCOLC%:MOVET%,I%-16*(H%=1):VDU5:PRINTA$
13950ENDPROC
13960REM
13970DEFPROCsmallmes(x%,y%,C%,A$)
13980LOCALo%,M%
13990IFMODE=12M%=16ELSEM%=32
14000o%=(1-(LENA$AND1))*M%
14010PROCmesbox(x%,y%,LENA$*M%+M%*2+o%,64)
14020GCOL12:VDU5:MOVEx%+M%+o%DIV2,y%+44:PRINTA$;
14030ENDPROC
14040REM
14050DEFPROCmesbox(x%,y%,X%,Y%)
14060GCOL8:RECTANGLEFILLx%,y%,X%,Y%
14070GCOL3:RECTANGLEx%+4,y%+4,X%-8,Y%-8
14080GCOL4:RECTANGLEx%+8,y%+8,X%-16,Y%-16
14090GCOL11:RECTANGLEFILLx%+12,y%+12,X%-24,Y%-24
14100ENDPROC
14110
14120DEFPROCmeswind2(A$,B$,C$,F%,C%)
14130*CHANNELVOICE 1 1
14140VDU26
14150LOCALX%,x%,x2%,c%,I%,Y%
14160Y%=80-(B$<>"")*48-(C$<>"")*48
14170X%=(LENA$*16+32):x%=640-X%DIV2
14180PROCmesbox(x%,800,X%,Y%)
14190GCOL3,C%
14200VDU5:X%=x%+16
14210x%=640-(LENB$*8)
14220x2%=640-(LENC$*8)
14230FORI%=1TOF%*2+1
14240MOVEX%,772+Y%:PRINTA$
14250IFB$<>""MOVEx%,724+Y%:PRINTB$
14260IFC$<>""MOVEx2%,676+Y%:PRINTC$
14270PROCdel(50)
14280SOUND1,-10,180,1
14290NEXT
14300ENDPROC
14310REM
14320DEFPROCmeswind(A$,B$,C$,F%,C%)
14330PROCmeswind2(A$,B$,C$,F%,C%)
14340VDU4:OFF
14350GCOL8,0
14360*SCHOOSE topofscreen
14370PLOT&ED,0,704
14380PROCwindows2
14390ENDPROC
14400REM
14410DEFPROCboard
14420totscore%()=totscore%()+currentS%()
14430FORT%=1TOnoofplayers:holescores%(hsp%(T%),Hole%)=currentS%(T%):NEXT
14440PROCboardcol
14450COLOUR3,0,144,0:GCOL131:CLG
14460PROCwinsort
14470LOCALP%,Y%,T%,I%,S%,mp%,A$,sc%,O%
14480O%=(play%=2)*4:VDU26
14490GCOL0:RECTANGLEFILL60,76,1156,920
14500GCOL64,0:RECTANGLEFILL64,80,1148,128
14510GCOL48,0:RECTANGLEFILL64,992,1148,-128
14520GCOL12:MOVE768,544:MOVE1212,992:PLOT85,1212,80
14530GCOL13:MOVE512,544:MOVE64,80:PLOT85,64,992
14540GCOL11:RECTANGLEFILL98,112,1080,848
14550GCOL0:RECTANGLE98,112,1080,848
14560VDU24,100;116;1176;956;:ORIGIN98,116:VDU5
14570GCOL14:FORP%=1TO6:Y%=788-P%*132
14580GCOL7:LINE0,Y%+124,1080,Y%+124
14590GCOL14:LINE0,Y%,1080,Y%
14600FORT%=40TO80STEP40:LINE0,Y%+T%,1080,Y%+T%:NEXT
14610FORT%=1TO8:X%=T%*120:LINEX%,Y%,X%,Y%+80:NEXT
14620NEXT
14630FORP%=1TOnoofplayers
14640mp%=mapstart%+&2F9:Y%=728-(P%-1)*132:GCOL12
14650FORI%=0TO-40STEP-40:FORT%=0TO8:MOVET%*120+4,Y%+I%:PRINT;?mp%:mp%+=&300
14660NEXT:NEXT:NEXT
14670FORP%=1TOnoofplayers
14680mp%=mapstart%+&2F9:Y%=728-(P%-1)*132:X%=32:par%=0
14690FORT%=1TOHole%:IFT%=10Y%-=40:X%=32
14700sc%=holescores%(hsp%(P%),T%)-?mp%:par%+=?mp%:MOVEX%,Y%
14710CASESGNsc%OF
14720WHEN 0:A$="PAR":GCOL15
14730WHEN 1:A$="+"+STR$sc%:GCOL5
14740WHEN-1:A$=STR$sc%:GCOL0
14750ENDCASE
14760PRINTSTRING$(5-LENA$," ");A$
14770X%+=120:mp%+=&300
14780NEXT
14790GCOLjump%(P%)+4:MOVE4,768-(P%-1)*132:PRINTname$(P%)TAB(20+O%);
14800CASEcurrents%(P%)OF
14810WHEN1:PRINT"{BEGINNER}";
14820WHEN2:PRINT"{ENTHUSIAST}";
14830WHEN3:PRINT"{AMATEUR}";
14840WHEN4:PRINT"{PROFESSIONAL}";
14850ENDCASE
14860PRINTTAB(40+O%);totscore%(P%);" STROKE"CHR$(-(totscore%(P%)>1)*83)TAB(53);
14870A$=" : "+STR$Hole%+" HOLE"+STRING$(-(Hole%>1),"S")+" PLAYED"
14880CASEplay%OF
14890WHEN1:PROCmatch
14900WHEN2:PROCstroke
14910ENDCASE
14920NEXT
14930GCOL15:T%=542-LENA$*8:MOVET%,824:PRINTA$
14940GCOL12:RECTANGLET%-8,788,LENA$*16+14,48
14950VDU26:PROCsmallmes(360,32,11," CONTINUE ")
14960PROCsmallmes(720,32,11,"QUIT ROUND")
14970REPEAT
14980MOUSERECTANGLE372,44,528,40
14990MOUSEON:MOUSETO464,64
15000PROCbutt(0):TIME=0:REPEATUNTILTIME>100
15010REPEAT:MOUSEX%,Y%,T%
15020UNTILT%AND(X%<556ORX%>718)
15030IFX%>718PROCconfirm:IFX%>926MOVE0,0:OSCLI("SCHOOSE topofscreen"):PLOT&ED,0,0:UNTIL0
15040UNTILTRUE
15050COLOUR0:VDU4:OFF
15060MOUSEOFF
15070GCOL139
15080ENDPROC
15090REM
15100DEFPROCconfirm
15110PROCbutt(0)
15120PROCgtos(0)
15130PROCmesbox(640,32,512,160)
15140GCOL8:MOVE656,176:PRINT"ARE YOU SURE YOU WANT TO QUIT?"
15150PROCsmallmes(794,60,8,"YES")
15160PROCsmallmes(916,60,8,"NO")
15170MOUSERECTANGLE806,72,178,40:MOUSETO890,82
15180REPEAT:MOUSEX%,Y%,T%
15190UNTILT%AND(X%<866ORX%>926)
15200ENDPROC
15210REM
15220DEFPROCmatch
15230LOCALT%,B$,S1%,S2%
15240FORT%=1TOHole%
15250IF holescores%(hsp%(1),T%)<holescores%(hsp%(2),T%)S1%+=1
15260IF holescores%(hsp%(2),T%)<holescores%(hsp%(1),T%)S2%+=1
15270NEXT:T%=ABS(S2%-S1%)
15280B$=STR$(T%):IFT%B$=B$+" UP"ELSEB$="EVEN"
15290B$=STRING$(14-LENB$," ")+B$
15300CASEP%OF
15310WHEN1:IFS1%>=S2%PRINTB$
15320WHEN2:IFS2%>=S1%PRINTB$
15330ENDCASE
15340A$=Course$+" : MATCH PLAY"+A$
15350ENDPROC
15360REM
15370DEFPROCstroke
15380LOCALT%,B$
15390T%=totscore%(P%)-par%:B$=STR$(ABST%)
15400CASESGNT%OF
15410WHEN0:B$="EVEN PAR"
15420WHEN1:B$=B$+" OVER PAR"
15430WHEN-1:B$=B$+" UNDER PAR"
15440ENDCASE
15450PRINTSTRING$(14-LENB$," ");B$
15460A$=Course$+" : STROKE PLAY"+A$
15470ENDPROC
15480REM
15490DEFPROCshowwind
15500LOCALw$,T%,C%,s%,i%,x1%,y1%,BX%,BY%
15510IFgreen% C%=9:w$="SLOPE":s%=-2ELSEC%=6:w$="WIND":s%=4
15520COLOUR13:PRINTTAB(26,0)"DIRECTION OF"TAB(29,1)w$
15530FORT%=C%TOC%+s%STEPs%
15540GCOLT%
15550CIRCLE526,820,88+i%
15560CIRCLE526,820,12+i%
15570i%+=4:NEXT
15580GCOL8
15590MOVE526,820
15600BX%=wx*25:BY%=wy*25
15610x1%=va*BY%+vb*BX%:y1%=vi*BY%+va*BX%
15620DRAW526+x1%,820+y1%
15630ENDPROC
15640REM
15650DEFPROCsetwind
15660WX=0:WY=0:F%=green%
15670wc=5+4*green%:wc2=wc
15680IFF%:P%=mappoint%+&2F4:wx=FNmap2/3:wy=FNmap2/3:ENDPROC
15690wx=0:wy=0:IFskill%<3ENDPROC
15700wx=Wx:wy=Wy
15710ENDPROC
15720REM
15730DEFPROCinitwind
15740LOCALa%
15750stren%=RND(36)
15760a%=RND(360)
15770Wx=((COSRADa%)*stren%)/9
15780Wy=((SINRADa%)*stren%)/9
15790Fx=(SINRADa%)*(15+(stren%DIV2))
15800Fy=(COSRADa%)*(15+(stren%DIV2))
15810ENDPROC
15820REM
15830DEFPROCspot
15840bs%=1:BX=0:BY%=-R%:h%=0
15850x1%=va*BY%+vb*BX:y1%=vi*BY%+va*BX
15860PROCvt(y1%,x1%,H%):ys%-=4
15870*FX112,2
15880lie%=POINT(xs%+2,ys%)
15890PROCwellie(0)
15900IFNOTgreen%THEN
15910T%=POINT((mx%(0,Hand%)+4+T%+80*Hand%),my%(0))
15920IFT%=6ORT%=11THEN
15930PROCwellie(30)
15940ENDIF
15950ENDIF
15960*FX112,1
15970MOVExs%,ys%:MOVEBY10,16
15980ox%=xs%:oy%=ys%
15990osx%=xs%:osy%=ys%
16000sx%=xs%:sy%=ys%
16010*SGET gr
16020*SGET sh
16030ENDPROC
16040REM
16050DEFPROCwellie(W%)
16060LOCALT%
16070FORT%=1TO8:m%(T%,0)=T%+W%:NEXT
16080wellie%=W%=30
16090ENDPROC
16100REM
16110DEFPROCsplash
16120*CHANNELVOICE 1 PLOP
16130LOCALA$,r%,a%,T%,x%,y%
16140bad%=FALSE:SOUND1,-15,5,20
16150FORr%=5TO55STEP5
16160IFr%>9THEN
16170GCOL6:WAIT:WAIT
16180FORa%=0TO45
16190x%=xs%+C(a%)*(r%-10):y%=ys%+S(a%)*((r%-10)>>2)
16200IFPOINT(x%,y%)=11POINTx%,y%
16210NEXT
16220ENDIF
16230GCOL11:IFr%<50THEN
16240WAIT:WAIT
16250FORa%=0TO45:x%=xs%+C(a%)*r%:y%=ys%+S(a%)*(r%>>2)
16260IFPOINT(x%,y%)=6POINTx%,y%
16270NEXT
16280ENDIF
16290NEXT
16300stroke%+=1
16310IFG%=11A$="THE SEA"ELSEA$="WATER"
16320PROCmeswind("BALL LOST IN "+A$,"FORFEIT ONE STROKE","PLEASE PLAY AGAIN",5,6)
16330PROCgetplayvals
16340PROCspot
16350*SCHOOSE plain
16360WAIT:PLOT&ED,mx%(g%,Hand%),my%(g%):VDU23,27;m%(1,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%)
16370ENDPROC
16380REM
16390DEFPROCputback
16400IFNOTgreen%THEN
16410IFABSx1%<80x1%=(80+RND(30))*SGNx1%
16420IFABSy1%<80y1%=(80+RND(30))*SGNy1%
16430ENDIF
16440currentR%(1)=FNdistance(ABSx1%,ABSy1%)
16450currentx%(1)=x1%
16460currenty%(1)=y1%
16470currentS%(1)=stroke%
16480ENDPROC
16490REM
16500DEFPROCswapall
16510SWAP currentR%(I%),currentR%(I%-1)
16520SWAP currentx%(I%),currentx%(I%-1)
16530SWAP currenty%(I%),currenty%(I%-1)
16540SWAP currents%(I%),currents%(I%-1)
16550SWAP currentS%(I%),currentS%(I%-1)
16560SWAP totscore%(I%),totscore%(I%-1)
16570SWAP oldpos%(I%),oldpos%(I%-1)
16580SWAP name$(I%),name$(I%-1)
16590SWAP hsp%(I%),hsp%(I%-1)
16600SWAP hand%(I%),hand%(I%-1)
16610SWAP jump%(I%),jump%(I%-1)
16620ENDPROC
16630REM
16640DEFPROCwinsort
16650LOCALT%,I%
16660IFnoofplayers<>1THEN
16670FORT%=1TOnoofplayers:FORI%=2TOnoofplayers
16680IFoldpos%(I%)<oldpos%(I%-1)THEN
16690PROCswapall
16700ENDIF
16710NEXT:NEXT
16720FORT%=1TOnoofplayers:FORI%=2TOnoofplayers
16730IFcurrentS%(I%)<currentS%(I%-1)THEN
16740PROCswapall
16750ENDIF
16760NEXT:NEXT
16770ENDIF
16780ENDPROC
16790REM
16800DEFPROCsetplayer
16810LOCALT%
16820FORT%=1TOnoofplayers
16830oldpos%(T%)=T%
16840NEXT
16850ENDPROC
16860REM
16870DEFPROCwhichplayer
16880LOCALT%,I%
16890IFnoofplayers<>1THEN
16900FORT%=1TOnoofplayers
16910FORI%=2TOnoofplayers
16920IFcurrentR%(I%)>currentR%(I%-1)THEN
16930PROCswapall
16940ENDIF
16950NEXT:NEXT
16960ENDIF
16970stroke%=currentS%(1)
16980skill%=currents%(1)
16990IFcurrentx%(1)=0ANDcurrenty%(1)=0THEN
17000round%=TRUE:mappoint%+=&300
17010ENDIF
17020IFhand%(1)<>Hand%THEN
17030Hand%=hand%(1)
17040FORT%=1TO11:OSCLI("SFlipY "+STR$(T%)):NEXT
17050FORT%=31TO38:OSCLI("SFlipY "+STR$(T%)):NEXT
17060*SFlipY 20
17070ENDIF
17080ENDPROC
17090REM
17100DEFPROCgetplayvals
17110X%=currentx%(1):YY%=currenty%(1)
17120ENDPROC
17130REM
17140DEFPROClight
17150Y%=YY%
17160IFY%>0ANDX%>0!px%=li%
17170IFY%>0ANDX%<=0!px%=(li%+1)AND3
17180IFY%<=0ANDX%<=0!px%=(li%+2)AND3
17190IFY%<=0ANDX%>0!px%=(li%+3)AND3
17200ENDPROC
17210REM
17220DEFPROCdrawscreen
17230P%=mappoint%:AA%=FNmap1
17240PROCcaltre(x%(),y%(),z%())
17250CALLsort,bs%,R%,BY%,K%,x1%,y1%,h%,AA%,x%(),z%(),y%()
17260PROCwindows:PROCsceen
17270ENDPROC
17280REM
17290DEFPROCsine(X%,Y%)
17300R%=FNdistance(ABSX%,ABSY%)
17310green%=(R%<525):Ma=.7-(green%*.3)
17320OL%=(VAL(STR$~((map!(mappoint%+&2FA))AND&FFFF)))>440
17330r=12096-2000*green%-1500*(OL%ANDNOTgreen%)
17340d=r-R%
17350g%=-green%:O%=-6292*green%:H%=250+O%
17360va=-X%/R%:vb=Y%/R%:vi=-vb
17370ENDPROC
17380REM
17390DEFFNdistance(x%,y%)
17400=SQR(x%^2+y%^2)
17410REM
17420DEFPROCgetstart
17430P%=&2E8+mappoint%:X%=FNmap2
17440YY%=FNmap2
17450Hole%=map?(mappoint%+&2F8)
17460stx%=X%:sty%=YY%
17470REMYY%=15*21:X%=0
17480FORT%=1TOnoofplayers
17490currentx%(T%)=X%
17500currenty%(T%)=YY%
17510currentR%(T%)=FNdistance(X%,YY%)
17520currentS%(T%)=0
17530NEXT
17540ENDPROC
17550REM
17560DEFPROCchhole
17570B%-=1
17580IF(B%>0ANDya>4)ORh%>30ENDPROC
17590IFh%>1ORABS(OBY%-BY%)>5PROCric:B%=4:ENDPROC
17600DEFPROCchhole2
17610D%=TRUE:*SCHOOSE sh
17620PLOT&ED,osx%,osy%
17630*SCHOOSE gr
17640PLOT&ED,ox%,oy%
17650*CHANNELVOICE 1 HOLED
17660SOUND1,-15,20,20
17670PROCdel(150)
17680PROCholedout
17690ya=0:u=0:ud=0:p%=0:h%=0:x1%=0:y1%=0
17700ENDPROC
17710REM
17720DEFPROCholedout
17730LOCALA$,B$,C$,F%,S%
17740S%=stroke%-map?(mappoint%+&2F9)
17750CASES%OF
17760WHEN1:A$="IT'S A BOGIE":B$=""
17770WHEN0:A$="HOLED OUT TO PAR":B$="WELL DONE!"
17780WHEN-1:A$="NICE ONE "+name$(1):B$="IT'S A BIRDIE"
17790WHEN-2:A$="SUPERB PLAY "+name$(1):B$="IT'S AN EAGLE"
17800WHEN-3:A$="CONGRATULATIONS "+name$(1):B$="YOU'VE FLOWN AN ALBATROSS"
17810OTHERWISE A$="HOLED OUT "+STR$S%+" OVER PAR":B$=""
17820ENDCASE
17830C$="":F%=3:S%=5:IFstroke%=1A$="WOW! IT'S A HOLE IN ONE":B$="KNOCKED IN BY":C$=name$(1):F%=6:S%=3
17840IF LENA$<LENB$REPEAT:A$=" "+A$+" ":UNTILLENA$>=LENB$
17850PROCmeswind(A$,B$,C$,F%,S%)
17860PROCdel(50)
17870ENDPROC
17880REM
17890DEFPROCric
17900SOUND4,-15,20,1
17910DEFPROC2ric
17920u=u*4:IFu=0u=(3+RND(5))*SGNx1%
17930ya=ya DIV2:p%=ya DIV3
17940IFNOTgreen%ANDya=0 h%=0:p%=0
17950ENDPROC
17960REM
17970DEFPROCflight
17980OBY%=BY%
17990REPEATPROCfly:VDU23,27;m%(8,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%):IFba%:VDU23,27;20|:PLOT&ED,bag%(Hand%),-754
18000IFgreen%ANDh%=0SYS6,112,2:G%=POINT(sx%+4,sy%+4):SYS6,112,1:IFG%=0PROCchhole
18010OBY%=BY%:IFNOTgreen%ANDABS(x1%+4)<5ANDABS(y1%)<5PROCchhole
18020IFABSsl>ya sl=ya/2*SGNsl
18030wc-=1:IFwc=0THEN
18040wc=wc2:IFwc2>1wc2-=1
18050WX+=wx:WY+=wy
18060ENDIF
18070UNTILya<=0ANDh%=0ANDABSp%<2
18080YY%=y1%:X%=x1%
18090IFD%ORNOTgreen%ENDPROC
18100*FX112,2
18110G%=POINT(sx%,sy%)
18120G1%=POINT(sx%,sy%+8)
18130*FX112,1
18140IF(G%ANDG1%)=0PROCchhole2
18150ENDPROC
18160REM
18170DEFPROCfly
18180IFh%<4ANDya<16WAIT
18190WAIT:BX+=u*yd+Sl:Sl+=sl:u-=ud:IFABSu>ya u=u>>1
18200BY%+=ya*yd:IFya>0 ya-=.5:ELSEya=0
18210x1%=va*BY%+vb*BX+WX:y1%=vi*BY%+va*BX+WY:h%+=p%*Ma:p%-=1:IFp%<10F%=TRUE
18220IFh%<=0 PROCbounce
18230PROCvt(y1%,x1%,H%):sx%=xs%:sy%=ys%:PROCvt(y1%,x1%,H%-h%)
18240IFK%=TRUE ud=0:ya=0:p%=0:u=0:K%=1:SOUND3,-10,20,40
18250IFW%CALL plotball,bs%,oy%,ox%,osy%,osx%,ys%,xs%,sy%,sx%
18260ENDPROC
18270REM
18280DEFPROCwalter
18290*CHANNELVOICE 1 SHOOSH
18300LOCALT%,I%
18310yd=1+(.75*green%):FORT%=1TO5:*SCHOOSE BLACK
18320WAIT:PLOT&ED,mx%(g%,Hand%),my%(g%):VDU23,27;m%(T%,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%):FORI%=0TOT%:WAIT:NEXT:NEXT
18330FORT%=5TO1STEPTRUE:*SCHOOSE BLACK
18340IFT%=3ANDNOTgreen%SOUND1,SO%,40,40
18350FORI%=1TOT%:WAIT:NEXT:PLOT&ED,mx%(g%,Hand%),my%(g%):VDU23,27;m%(T%,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%):NEXT
18360SOUND2,SO%,1,10
18370FORT%=6TO8:IFT%>6PROCfly:ELSEWAIT
18380*SCHOOSE plain
18390IFNOTgreen%:WAIT:PLOT&ED,mx%(g%,Hand%),my%(g%)ELSEWAIT
18400VDU23,27;m%(T%,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%)
18410IFlie%=1:GCOL1:FORI%=0TO20:POINTsa%(0,T%-6,I%)+(T%+10)*Hand%,sa%(1,T%-6,I%)+my%(g%):NEXT:GCOL8,0
18420NEXT
18430PROCfly:PROCfly
18440*SCHOOSE plain
18450WAIT:PLOT&ED,mx%(g%,Hand%),my%(g%):VDU23,27;m%(8,g%)|:PLOT&ED,mx%(g%,Hand%),my%(g%)
18460ENDPROC
18470REM
18480DEFPROCdel(T%)
18490TIME=0:REPEATUNTILTIME>T%
18500ENDPROC
18510REM
18520DEFPROCbunker
18530GCOL32,0:H%+=2:P%=oP%
18540PROCdrawbunk
18550GCOL2:H%+=2:P%=oP%
18560PROCdrawbunk
18570H%-=4
18580ENDPROC
18590REM
18600DEFPROCdrawbunk
18610np%=FNmap1:PROCmap(CX%,CY%,H%,4,r):PROCmap3(SX%,SY%,H%,4,r,CX%)
18620FORI%=1TOnp%-1:PROCmap3(XI%,YI%,H%,85,r,CX%):MOVECX%,CY%:NEXT
18630PLOT85,SX%,SY%
18640ENDPROC
18650REM
18660DEFPROCmap3(RETURN x%,RETURN y%,z%,p%,r,CX%)
18670LOCALpO%
18680y%=FNmap2:x%=FNmap2:xe=va*x%+vb*y%:ze=(vi*x%+va*y%+r)*Ma:x%=d*xe DIVze:y%=-(d*z%DIVze)*2
18690IFNOTgreen%IFy%>-32ORy%<&FFFF8000 y%=-6000
18700x%=x%-SGN(x%-CX%)*4
18710pO%=POINT(x%,y%)
18720WHILEpO%>3
18730y%+=4:pO%=POINT(x%,y%)
18740ENDWHILE
18750PLOTp%,x%,y%
18760ENDPROC
18770REM
18780DEFPROCsceen
18790No%=FNmap1
18800rough=P%
18810IFgreen%THEN
18820Co%=FNmap1
18830REPEAT:np%=FNmap1
18840P%=P%+np%*4+4:Co%=FNmap1:No%-=1
18850UNTILCo%=5ORCo%=1:P%-=1
18860ENDIF
18870sP%=P%:FORT%=1TONo%:Co%=FNmap1:IFCo%=6water=P%
18880IFgreen%ANDCo%=4THEN
18890np%=FNmap1:P%=P%+np%*4+4
18900ELSE:oP%=P%:Co%=Co%-((Co%=1)ANDgreen%):GCOLCo%
18910PROCdrawit:IFCo%=1PROCbunker
18920ENDIF:NEXT:IFgreen%THEN
18930GCOL8,0
18940*SCHOOSE HOLE
18950PLOT&ED,-6,-(d*H%DIVr)*2-12
18960ENDIF
18970PROCtrees:*FX112,2
18980IFgreen%COLOUR135:ELSECOLOUR139
18990CLS:P%=sP%:FORT%=1TONo%:Co%=FNmap1:GCOLCo%
19000IFgreen%ANDCo%=4THEN
19010np%=FNmap1:P%=P%+np%*4+4
19020ELSEoP%=P%:PROCdrawit
19030ENDIF
19040NEXT
19050IFgreen%THEN
19060GCOL8,0
19070*SCHOOSE BLACKHOLE
19080PLOT&ED,-6,-(d*H%DIVr)*2-12
19090ENDIF
19100*FX112,1
19110CASEjump%(1)OF
19120WHEN1:COLOUR8,208,0,0
19130WHEN2:COLOUR8,144,128,80
19140WHEN3:COLOUR8,112,112,112
19150WHEN4:COLOUR8,240,112,0
19160WHEN5:COLOUR8,96,96,48
19170WHEN6:COLOUR8,208,80,144
19180ENDCASE
19190ENDPROC
19200REM
19210DEFPROCgtos(Y%)
19220VDU26:MOVE0,Y%:MOVE1279,Y%+319:*SGET topofscreen
19230ENDPROC
19240REM
19250DEFPROCgetinfo
19260*CHANNELVOICE 1 1
19270LOCALya2,BX%,BY%,yst%
19280PROCgtos(704)
19290ORIGIN80,0
19300VDU24,0;704;1131;1023;
19310GCOL139:COLOUR139:CLG
19320GCOL8:RECTANGLE0,704,412,319
19330RECTANGLE412,704,228,319
19340RECTANGLE640,704,491,319
19350GCOL3:RECTANGLE4,708,404,311
19360RECTANGLE416,708,220,311
19370RECTANGLE644,708,483,311
19380GCOL4:RECTANGLE8,712,396,303
19390RECTANGLE420,712,212,303
19400RECTANGLE648,712,475,303
19410OFF:VDU28,6,8,74,1:COLOUR12
19420PRINTTAB(41,0)"PLAYER : ";:COLOUR8:PRINTname$(player%):COLOUR12
19430PRINTTAB(41,1)"PLAYING AT : "Course$
19440PRINTTAB(41,2)"HOLE NUMBER : ";Hole%
19450PRINTTAB(41,3)"PAR : ";~map?(mappoint%+&2F9)
19460PRINTTAB(41,4)"OVERALL LENGTH : ";~(map!(mappoint%+&2FA))AND&FFFF;" YARDS"
19470PRINTTAB(41,5)"RANGE TO HOLE : ";:COLOUR8:PRINT;(R%DIV21)*(1-green%*2);:IFgreen%:PRINT" FEET":ELSEPRINT" YARDS"
19480COLOUR12:PRINTTAB(41,6)"STROKES PLAYED : ";stroke%
19490PROCshowlie
19500PROCsetwind
19510PROCshowwind
19520REPEAT
19530ORIGIN80,0
19540PROCgetclub
19550COLOUR12:PRINTTAB(2)"DIRECTION THEN POWER"
19560COLOUR8:PRINTTAB(4)A$(vp%)" SELECTED"
19570GCOL8:RECTANGLE46,776,320,128:RECTANGLE44,776,324,128:LINE48,866,364,866
19580GCOL6:RECTANGLEFILL48,870,316,32:GCOL12:MOVE78,898:VDU5:PRINT"CLUB POWER METER"CHR$4:OFF
19590LINE56,784,56,824:FORT%=49TO100:IFINT((T%/100*T%)MOD25)=0:LINET%*3+56,784,T%*3+56,824
19600NEXT
19610RECTANGLE56,792,300,24
19620GCOL11:RECTANGLEFILL56,796,300,16
19630my%=256-green%*164:SYS6,106,2
19640ORIGIN0,0
19650MOUSERECTANGLE432+(green%=0)*160,my%,414-(green%=0)*320,0:MOUSETO640,my%
19660xs%=0:OX%=0:u=0
19670REPEAT:MOUSEX%,Y%,C%
19680IFC%=1ORC%=4UNTILTRUE:UNTILFALSE
19690a%=(X%-xs%-640)/8:IFABSa%<10a%=SGNa%
19700u+=a%
19710IFX%<>xs%THEN
19720BX%=0:BY%=-R%:PROCvt(vi*BY%+va*BX%,va*BY%+vb*BX%,H%):yst%=ys%+25
19730REPEAT:BX%+=u:BY%+=80:PROCvt(vi*BY%+va*BX%,va*BY%+vb*BX%,H%):UNTILys%>=yst%
19740ENDIF
19750MOUSETOxs%-640,my%
19760UNTILC%=2
19770MOUSEOFF
19780p%=FNpower
19790SO%=-15*p%/100
19800IFNOTgreen%ANDvp%=13u=u+RND(5)-3
19810u=u/(8-g%*2):ya=INT((CV%(vp%)/100)*p%):IFya<1ya=1
19820ud=u/(ya*3)
19830p%=p%*.32:h%=0
19840IFvp%=13p%=5*-(green%=FALSE)
19850PROCdel(100):stroke%+=1
19860VDU4,26:OFF:*SCHOOSE topofscreen
19870GCOL8,0:PLOT&ED,0,704
19880PROCwindows2
19890ENDPROC
19900REM
19910DEFPROCshowlie
19920LOCALa$
19930a$="ON THE ":COLOUR8
19940PRINTTAB(41,7);
19950bunk%=FALSE:bad%=FALSE:wind%=skill%>2
19960IFgreen%THEN
19970IFlie%=5 PRINTa$"GREEN";:ELSEPRINT"ON EDGE OF GREEN";:lie%=5
19980ENDIF
19990CASElie%OF
20000WHEN1:PRINT"IN A BUNKER ";:PROCgob
20010WHEN4:PRINT"ON A PATHWAY";
20020WHEN6:PROCwetmes
20030WHEN7:IFy1%<>sty%:PRINTa$"FAIRWAY";:ELSEPRINTa$"TEE";
20040WHEN9:PRINT"IN THE ROUGH ";:PROCgob
20050ENDCASE
20060ENDPROC
20070REM
20080DEFPROCwetmes
20090GCOL6:bunk%=TRUE:LOCALT%
20100T%=RND(3)
20110CASET%OF
20120WHEN1,3:PRINT"IN SHALLOW WATER";
20130WHEN2:IFwellie%PRINT"IT'S A WELLIE JOB";:ELSEPRINT"BALANCED ON LILY PAD";
20140ENDCASE
20150ENDPROC
20160REM
20170DEFPROCgob
20180LOCALg$,b$:g$="GOOD LIE":IFlie%=9b$="BAD LIE":ELSEb$="PLUGGED"
20190CASEskill%OF
20200WHEN1:PRINT"NO EFFECT";
20210WHEN2,3:PRINTg$;:bunk%=TRUE
20220WHEN4:bunk%=TRUE:IFRND(2)=2PRINTb$;:bad%=1:ELSEPRINTg$;
20230ENDCASE
20240ENDPROC
20250REM
20260DEFFNpower
20270LOCALX%,C%,c%,p%,a%
20280ORIGIN80,0
20290COLOUR12:PROCbutt(0):PROCdel(1):a%=1
20300WHILEC%=0ANDc%<>156
20310p%+=a%:IFp%=100a%=TRUE
20320c%+=1:GCOL8:IFc%AND1WAIT
20330RECTANGLEFILL56,796,p%*3,16:GCOL11:RECTANGLEFILL56+p%*3,796,300-p%*3,16
20340PRINTTAB(2,4);INT(p%/100*p%)-(c%<10);"% ":MOUSEX%,X%,C%
20350ENDWHILE
20360Sl=0:sl=0
20370IFvp%<>13THEN
20380CASEC%OF
20390WHEN1:sl=.05
20400WHEN4:sl=-.05
20410ENDCASE
20420ENDIF
20430IFskill%<>1THEN
20440CASElie%OF
20450WHEN1,9:p%=(p%/100)*red%(vp%,bad%)
20460WHEN6:a%=vp%-2*(p%<11):p%=p%/100*red%(a%,bad%)
20470ENDCASE
20480ENDIF
20490SOUND1,-10,200,1
20500IFp%<1p%=1
20510=p%
20520REM
20530DEFPROCgetclub
20540PROCbutt(0):PROCcls
20550IFgreen%vp%=13:ENDPROC
20560LOCALX%,Y%,C%,x%,y%,ox%,oy%
20570ox%=-100:OFF:VDU28,6,8,74,1:PROCmrect(1):MOUSE ON:COLOUR12:REM:SYS6,106,3
20580FORT%=0TO13:PRINTTAB(TX%(T%),TY%(T%))A$(T%);:NEXT
20590COLOUR2:PRINTTAB(6,0)"SELECT A CLUB":TEMPO&2000:BEATS100:VDU5:GCOL3,2:PROCbox
20600REPEAT:IFBEAT=0:GCOL3,2:PRINTTAB(7,1)"SELECT A CLUB":REPEATUNTILBEAT<>0
20610MOUSEX%,Y%,C%:x%=X%DIV128:y%=Y%AND&FFE0
20620IFx%<>ox%ORy%<>oy%PROCbox
20630PROCmrect(X%):vp%=3^x%+(x%=0)+28-y%DIV32+(x%=2ANDy%<832)
20640UNTILC%<>0
20650PROCbutt(0):VDU4
20660DEFPROCcls
20670OFF:VDU28,6,8,29,1:CLS
20680ENDPROC
20690REM
20700DEFPROCbox
20710GCOL3,6
20720RECTANGLEFILL32+128*ox%,oy%,96,32
20730RECTANGLEFILL32+128*x%,y%,96,32
20740SOUND1,-10,200,1
20750ox%=x%:oy%=y%
20760ENDPROC
20770REM
20780DEFPROCmrect(R%)
20790IFR%>288PROCiop2
20800CASER%OF
20810WHEN 1:MOUSERECTANGLE38,844,90,72:MOUSETO83,912
20820WHEN 162:MOUSERECTANGLE38,844,90,72:MOUSETO83,846
20830WHEN 128:MOUSERECTANGLE162,752,90,164:MOUSETO208,912
20840WHEN 252:PROCiop
20850WHEN 288:MOUSERECTANGLE162,752,90,164:MOUSETO208,756
20860ENDCASE
20870ENDPROC
20880REM
20890DEFPROCiop
20900IFY%>835THEN
20910MOUSERECTANGLE288,836,90,80:MOUSETO349,912
20920ELSE MOUSERECTANGLE288,752,90,50:MOUSETO349,778
20930ENDIF
20940ENDPROC
20950REM
20960DEFPROCiop2
20970IFY%=836MOUSERECTANGLE288,752,90,50:MOUSETO349,786
20980IFY%=802MOUSERECTANGLE288,836,90,80:MOUSETO349,856
20990ENDPROC
21000REM
21010DEFPROCbutt(on)
21020LOCALD%,C%
21030REPEAT
21040MOUSED%,D%,C%
21050UNTILC%=on
21060ENDPROC
21070REM
21080DEFPROCwindows
21090VDU26:GCOL128:CLG:PROCmaincols
21100IFNOTgreen%THEN
21110GCOL6:RECTANGLEFILL 0,0,1280,736
21120GCOL4:LINE0,732,1280,732
21130GCOL138:VDU24,0;736;1279;1023;:CLG
21140PROCclouds
21150ELSEGCOL135:CLG
21160ENDIF
21170DEFPROCwindows2
21180VDU26:ORIGIN640,768+O%-6166*green%
21190ENDPROC
21200REM
21210DEFPROCclouds
21220LOCALC%,T%,O%
21230IFvb>0 O%=DEGASNva ELSEO%=180+(180-DEGASNva)
21240O%=ABSO%*3.5:GCOL11
21250FORC%=1TO12:FORT%=1TO12
21260ELLIPSEFILL(CL%(0,C%,T%)+O%)MOD2520+I%,CL%(1,C%,T%),256,64
21270NEXT:NEXT
21280ENDPROC
21290REM
21300DEFPROCinitcloud
21310LOCALC%,T%,X%,Y%
21320FORC%=0TO12:X%=194*C%+RND(194):Y%=RND(288)+736
21330FORT%=0TO12:CL%(0,C%,T%)=X%+RND(5)*40:CL%(1,C%,T%)=Y%+RND(5)*12
21340NEXT:NEXT
21350ENDPROC
21360REM
21370DEFPROCbounce
21380h%=0:p%=-p%/2.2
21390IFvp%=13ANDNOTgreen%ANDRND(10)=5PROC2ric
21400*FX112,2
21410G%=POINT(sx%,sy%)
21420*FX112,1
21430CASEG%OF
21440WHEN1:p%=p%>>1:IFp%>4:ya=ya*.3:ELSEya=ya*.75
21450WHEN4:IFp%>3ANDya<>0p%=p%*1.5:ya=ya*1.3:ud=ud/1.3
21460WHEN6,11:W%=FALSE:xs%=1000:sx%=1000:ya=0:p%=0:h%=0:CALL plotball,bs%,oy%,ox%,osy%,osx%,ys%,xs%,sy%,sx%
21470WHEN9,-1:ya=ya/1.5:p%=p%>>1:u=u/2:ud=ud/2
21480ENDCASE
21490ENDPROC
21500REM
21510DEFPROCdrawit
21520np%=FNmap1:PROCmap(CX%,CY%,H%,4,r):PROCmap(SX%,SY%,H%,4,r)
21530FORI%=1TOnp%-1:PROCmap(XI%,YI%,H%,85,r):MOVECX%,CY%:NEXT
21540PLOT85,SX%,SY%
21550ENDPROC
21560REM
21570DEFPROCvt(x%,y%,z%)
21580xe%=va*x%+vb*y%:ze%=(vi*x%+va*y%+r)*Ma:xs%=d*xe% DIVze%:ys%=-(d*z% DIVze%)*2
21590ENDPROC
21600REM
21610DEFPROCcaltre(RETURN x%(),RETURN y%(),RETURN z%())
21620LOCALi%,l%,lo%,n%
21630FORA%=1TOAA%
21640l%=FNmap2:trex!(A%*4)=l%
21650i%=FNmap2:trey!(A%*4)=i%
21660xe=va*i%+vb*l%
21670ze=(vi*i%+va*l%+r)*Ma
21680x%(A%)=d*xe DIVze:y%(A%)=-(d*H% DIVze)*2
21690z%(A%)=-(d*(H%+200)DIVze)*2
21700NEXT
21710ENDPROC
21720REM
21730DEFPROCmap(RETURN x%,RETURN y%,z%,p%,r)
21740y%=FNmap2:x%=FNmap2:xe=va*x%+vb*y%:ze=(vi*x%+va*y%+r)*Ma:x%=d*xe DIVze:y%=-(d*z%DIVze)*2
21750IFNOTgreen%IFy%>-32ORy%<&FFFF8000 y%=-6000
21760PLOTp%,x%,y%
21770ENDPROC
21780REM
21790DEFFNmap1:P%+=1:=map?(P%-1)
21800REM
21810DEFFNmap2:P%+=2:Q%=map!(P%-2)AND&FFFF
21820IFQ%>&7FFFQ%=Q%OR&FFFF0000
21830=Q%
21840REM
21850DEFPROCtrees
21860PF%=TRUE:PB%=-(d*H%DIV(r*Ma))*2
21870PT%=-(d*(H%-30)DIV(r*Ma))*2
21880FB%=-(d*(H%-24)DIV(r*Ma))*2
21890xe=va*Fx+vb*Fy:ze=(vi*Fx+va*Fy+r)*Ma:FX%=d*xe DIVze:FY%=-(d*(H%-16-(stren%DIV4))DIVze)*2
21900IFgreen%ENDPROC
21910FORT%=AA%TO1STEPTRUE
21920X1%=x%(T%):Y%=y%(T%)
21930IFPF%ANDY%<PB% GCOL11:MOVE0,PB%:DRAW0,PT%:GCOL3:MOVE0,FB%:PLOT85,FX%,FY%:PF%=FALSE
21940IF(ABSX1%>400ORY%>-708)ANDABSX1%<800ANDY%>-1000THEN
21950x%=(ABSY%-ABSz%(T%))>>1:y%=-x%>>2:ya%=y%*1.5:xa%=x%>>4:yd%=ya%>>2
21960GCOLtr%!(((px%+1)AND3)*4):RECTANGLEFILLX1%,Y%,-xa%,y%
21970GCOLtr%!(((px%+2)AND3)*4):RECTANGLEFILLX1%,Y%,xa%,y%
21980Y%+=y%:xa%=xa%*2:z%(T%)=FALSE:x%=x%*.8:xa%=xa%*.8
21990CALLplottree,xa%,y%,x%,X1%,Y%,ya%,yd%
22000ELSE z%(T%)=TRUE
22010ENDIF
22020NEXT
22030ENDPROC
22040REM
22050DEFPROCinitiate
22060Hand%=0:green%=0:tee=FALSE:Ineditor=FALSE
22070GCOL0,1
22080PROCcolours(12)
22090DIMred%(13,1),F$(77)
22100DIM CL%(1,12,12)
22110DIM code &900
22120DIM map &6D00
22130DIM parb 20
22140DIM x%(96),y%(96),z%(96)
22150DIMTX%(13),TY%(13),A$(13),CV%(13)
22160DIMmx%(1,1),my%(1),m%(8,1),bag%(1),name$(6),defname$(6):player%=1
22170DIMholescores%(6,18),currentx%(6),currenty%(6),currentR%(6),currentS%(6),currents%(6),totscore%(6),oldpos%(6),hsp%(6),hand%(6),jump%(6)
22180DIMC(45),S(45)
22190DIMsa%(1,2,20)
22200currents%()=1
22210FORI%=2TO4
22220FORN%=0TO20
22230sa%(0,I%-2,N%)=RND(I%*8)-I%*4
22240sa%(1,I%-2,N%)=I%*12+16+RND(I%)*4
22250NEXT
22260NEXT
22270FORT%=0TO45
22280C(T%)=COSRAD(T%*8):S(T%)=SINRAD(T%*8)
22290NEXT
22300mx%(0,1)=-2:mx%(0,0)=-96:my%(0)=-728
22310mx%(1,1)=-4:mx%(1,0)=-64:my%(1)=-13121
22320bag%(0)=-196:bag%(1)=120
22330sx%=TRUE:sy%=TRUE:r=11096
22340RESTORE 22550
22350FORT%=0TO13
22360READTX%(T%),TY%(T%),A$(T%),CV%(T%)
22370NEXT
22380PROCwellie(0)
22390FORT%=1TO8:READm%(T%,1):NEXT
22400FORI%=0TO1:FORT%=0TO13:READred%(T%,I%):NEXT,
22410CX%=0:CY%=0:SX%=0:SY%=0:XI%=0:YI%=0
22420h%=0:x1%=0:y1%=0:K%=0:BY%=0:bs%=0
22430defname$(1)="JOHN"
22440defname$(2)="GEORGE"
22450defname$(3)="PAUL"
22460defname$(4)="RINGO"
22470defname$(5)="MICK"
22480defname$(6)="JERRY"
22490PROCcode
22500*POINTER
22510MOUSE OFF
22520MOUSECOLOUR1,0,240,0
22530MOUSECOLOUR2,0,128,0
22540ENDPROC
22550DATA1,2,1 WOOD,74
22560DATA1,3,3 WOOD,70
22570DATA1,4,5 WOOD,68
22580DATA9,2,1 IRON,67
22590DATA9,3,2 IRON,65
22600DATA9,4,3 IRON,63
22610DATA9,5,4 IRON,61
22620DATA9,6,5 IRON,59
22630DATA9,7,6 IRON,57
22640DATA17,2,7 IRON,55
22650DATA17,3,8 IRON,53
22660DATA17,4,9 IRON,48
22670DATA17,6,WEDGE,41
22680DATA17,7,PUTTER,60
22690DATA9,10,10,11,11,9,9,9
22700DATA30,40,48,55,61,66,71,76,81,85,89,93,96,100
22710DATA1,1,1,1,1,1,15,40,55,66,76,85,93,1
22720REM
22730DEFPROCcolours(M%)
22740WAIT:MODEM%:OFF
22750PROCmaincols
22760VDU23,17,4,1|
22770VDU23,2,&EF,&FE,&EF,&FE,&EF,&FE,&EF,&FE
22780VDU23,3,&12,&21,&12,&21,&12,&21,&12,&21
22790VDU23,4,&C0,&0C,&C0,&0C,&C0,&0C,&C0,&0C
22800VDU23,5,&D4,&4D,&D4,&4D,&D4,&4D,&D4,&4D
22810ENDPROC
22820DEFPROCmaincols
22830REM
22840COLOUR0,0,0,0:REM BLACK
22850COLOUR1,176,128,0:REM DARK SAND
22860COLOUR2,176,160,48:REM LIGHT SAND
22870COLOUR3,208,160,144:REM FLESH
22880COLOUR4,144,144,144:REM PATH
22890COLOUR5,16,208,0:REM GREEN
22900COLOUR6,32,144,208:REM WATER
22910COLOUR7,0,160,0:REM FAIRWAY
22920COLOUR8,208,0,0:REM RED
22930COLOUR9,0,112,0:REM ROUGH
22940COLOUR10,96,192,224:REM SKY
22950COLOUR11,240,240,240:REM WHITE
22960COLOUR12,80,48,16:REM DARK BROWN
22970COLOUR13,96,64,48:REM LIGHT BROWN
22980COLOUR14,16,64,48:REM DARK GREEN (TREE)
22990COLOUR15,0,96,64:REM LIGHTER GREEN (TREE)
23000ENDPROC
23010REM
23020DEFPROCpointer
23030DIMpar 20,block 112
23040RESTORE23150
23050FORT%=0TO108STEP4:READblock!T%:NEXT
23060?par=0
23070par?1=2
23080par?2=8
23090par?3=14
23100par?4=16
23110par?5=7
23120par!6=block
23130MODE12
23140A%=21:B%=par:C%=par DIV256:SYS 7,A%,B%,C%
23150DATA&AAAA,&AAAA0000,&9556,&95560000,&AA96,&96AA0000,&A6,&9A000000,&2A,&A8000000,&0,&0,&0,&0,&0,&0,&0,&0,&2A,&A8000000,&A6,&9A000000,&AA96,&96AA0000,&9556,&95560000,&AAAA,&AAAA0000
23160ENDPROC
23170REM
23180DEFPROCcode
23190OSCLI("LOAD <Obey$Dir>.holedout4 "+STR$~code)
23200plotball=code+&188
23210plottree=code
23220sort=code+&7E0
23230px%=code+&158
23240tr%=code+&148
23250trex=code+&4B8
23260trey=code+&63C
23270ENDPROC
� >!DESIGNER.HOLEDOUT3D
9� PROGRAMMED BY G.J.KEY BETWEEN 16-10-89 AND 20-10-89
� (C) THE FOURTH DIMENSION
(�
2ș"Hourglass_Smash"
<
�*FX229,1
F
�*FX200,2
PL� OB%(6),OB$(6),TRX%(96),TRY%(96),HX%(30,30),HY%(30,30),CO%(30),PTS%(30)
Z�pointer:�initiate
d
�instruct
n
*FX229
x�ONERROR
��colours(12)
�*SCHOOSE SCREEN
�*CHANNELVOICE 1 BELL
��&ED,0,0
��=0
� *FX15
��:ȗX%,Y%,T%
��>3000�1,-15,300,1:�=0
��T%��(10)<>�
�*CHANNELVOICE 1 1
��
�Ineditor=�
��getoptions
�*FX229,1
�colours(12)
"Hole%=1:totscore%()=0
,#�T%=1�noofplayers:hsp%(T%)=T%:�
6X%=0
@�
J�X%>718�Hole%=18��:��
Tround%=�
^�initcloud
hli%=�(4)-1
r
�getstart
|
�initwind
��setplayer
��
��whichplayer
��round%��:�board:��
��getplayvals
�
�light
��sine(X%,Y%)
��drawscreen
� �spot
�%�mx%(g%,Hand%),my%(g%):�BY120,176
�*SGET PLAIN
�*SCHOOSE BALL1
��&ED,xs%,ys%
%�mx%(g%,Hand%),my%(g%):�BY120,176
*SGET BLACK
*SCHOOSE 20
&ba%=sty%=y1%:�8,0
0�ba%�&ED,bag%(Hand%),-754
:�
D/�23,27;m%(1,g%)|:�&ED,mx%(g%,Hand%),my%(g%)
N�getinfo
X
D%=�:B%=�
b
W%=�:K%=�
l�walter
v�flight
��sx%>640�chofsc
��W%�splash:��:���
��putback
���
��
�
�
��edit
�exit=�:Ȟ20
�island=412
��Course$="EDITOR"
��flag,mem,len,par,NO%,NT%,ob%,closed:�,PTS%(),HX%(),HY%(),CO%(),TRX%(),TRY%(),OB%(),OB$():DIM OB%(6),OB$(6),TRX%(96),TRY%(96),HX%(20,20),HY%(20,20),CO%(20),PTS%(20),sx%,sy%
�OB%(0)=9:OB$(0)="ROUGH "
�OB%(1)=7:OB$(1)="FAIRWAY"
OB%(2)=5:OB$(2)="GREEN "
OB%(3)=2:OB$(3)="BUNKER "
OB%(4)=4:OB$(4)="PATH "
OB%(5)=6:OB$(5)="WATER "
* OB%(6)=&107:OB$(6)="TEE "
4�
>closed=�
H
�setmainv
R&mappoint%=0:map?(mappoint%+&2F8)=1
\len=500:par=4:�startup
f �grid
p�
z
�chooseob
��mem<10�7:�0
��exit ��:��:�
�
mem-=2
��butt(0)
��getcent
��req("DRAW OUTLINE")
�9�8:�0,2)"LEFT BUTTON TO FIX THE LOCATION OF A POINT"
�D�"RIGHT BUTTON TO JOIN ENDS TO COMPLETE THE OBJECT AND EXIT":�13
�+sx%=-HY%(NO%,0)*1.5:sy%=-HX%(NO%,0)*1.5
�(�MOVE-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5
��
�D�134:�12:�28,0,31,79,0:�62,1);~mem;" ":�13:�139:�28,1,30,78,25
��mou
�3,13
�sx%,sy%,X%,Y%
Ȗ:Ȗ
$�sx%,sy%,X%,Y%
.
�Y%>-368�
8
�K%=4�
B
� mem>=4�
L�0,OB%(ob%)
VPTS%(NO%)+=1
`$�-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5
j�sx%,sy%
t
�85,X%,Y%
~sx%=X%:sy%=Y%
� �grid
�2�MOVE-HY%(NO%,0)*1.5,-HX%(NO%,0)*1.5:MOVEX%,Y%
�HX%(NO%,PTS%(NO%))=-Y%/1.5
�HY%(NO%,PTS%(NO%))=-X%/1.5
�-�58,1);"OBJECT HAS ";PTS%(NO%);" POINTS"
�
mem-=4
��butt(0)
��
��
��
�closed=K%=1
��PTS%(NO%)=20closed=�
�closed
�PTS%(NO%)>1�
'�85,-HY%(NO%,1)*1.5,-HX%(NO%,1)*1.5
NO%+=1
(�
2mem=mem+2+4*(PTS%(NO%)+1)
<�7
F�
P�redisplay
Z�0
d�
n
x��setmainv
��colours(12):ȗ�
�"�COLOUR3,208,160,144:REM FLESH
�!�COLOUR3,32,144,208:REM WATER
�
��0,80,80,80
��mesbox(0,256,1279,768)
��mesbox(0,0,1279,256)
� �24,16;272;1263;1007;:�134:�
��28,1,30,78,25:�139:�
��
�
�
��startup
�holep=1:�readhole2
�
��inputlength
"
�*FX229,1
,�
6�
@l�8:�0,2)"ACCEPTABLE RANGE IS BETWEEN 50 AND 504 YARDS"'"YOU CAN NO LONGER ABORT THE 'NEW' OPTION"�7:�13
J0�0,0)"PLEASE ENTER HOLE LENGTH {YARDS} "len
T�len>49�len<505
^�getpar
h�PROCwrimap(len)
rmem=&2E6
|HX%(0,0)=0
�HY%(0,0)=len �2
�HX%(0,1)=160
�HY%(0,1)=len+40
�HX%(0,2)=-160
�HY%(0,2)=len+40
�HX%(0,3)=-180
�HY%(0,3)=-180
�HX%(0,4)=180
�HY%(0,4)=-180
�CO%(0)=9
�
PTS%(0)=4
�mem=mem-5*4-2
���startup2
�26,24,12;268;1267;1011;:�
ȑisland+len,640
��134:�12:�2,1);len;" YARDS : PAR ";par;" : HOLE No. ";map?(mappoint%+&2F8);" : T X ";:P%=mappoint%+&2E8:�;�map2 �21;" : T Y ";�map2 �21;" : Memory &";~mem
&�28,1,30,78,25:�139:�
0�9
:�-HY%(0,0)*1.5,HX%(0,0)*1.5
D�T%=1�4
N�-HY%(0,0)*1.5,HX%(0,0)*1.5
X$�85,-HY%(0,T%)*1.5,HX%(0,T%)*1.5
b�
l"�85,-HY%(0,1)*1.5,HX%(0,1)*1.5
v*FX229,0
��
�
���getpar
��npar,A%
�
*FX229
��:��:�TVH
�ș6,229,0,255 � ,A%
� *FX15
��:�
�c�8:�0,2)"THE CURRENT PAR IS ";par;"."'"THE ACCEPTABLE RANGE IS 2 TO 5":�A%=0�"ESCAPE TO ABORT"
�+�13:�0,0)"WHAT IS THE HOLE PAR ? "npar
��npar<2�npar>5 �7
��npar>1�npar<6
par=npar
P%=mappoint%+&2E8:�wrimap(0)
�*FX229,1
�
*
4
��getcent
>"�8:�req("POSITION CENTRE"):�13
HPTS%(NO%)=0
R�
\�mou
f
�Y%>-368�
p�K%�
zclosed=�
�HX%(NO%,0)=-Y%/1.5
�HY%(NO%,0)=-X%/1.5
��
��
�
�closed=�
�
mem-=4
��butt(0)
��
�
�
��grid
��0,0
�
�X%,Y%
�X%=-1500
)�23,6,&55,&55,&55,&55,&55,&55,&55,&55
�
�X%*1.5,-384:�29,X%*1.5,640
$
X%+=50
.�X%>600
8)�23,6,&11,&11,&11,&11,&11,&11,&11,&11
B�Y%=-200�200�50
L!�-1000,Y%*1.5:�29,1000,Y%*1.5
V�
`!�0,-384,0,640:�-1500,0,1000,0
j�5:ȏ0,0,25*1.5
t
�CO%(NO%)
~�
�
���shsc(T%,C%)
��C%�128+8:�11:� �128+11:�8
� ȎT%�
��1:�30,2) "DELETE OBJECT"
��2:�30,3)"ALTER OBJECT"
��3:�47,2)"SAVE COURSE"
��4:�64,2)"LOAD COURSE"
��5:�47,3)"READ HOLE"
��6:�64,3)"WRITE HOLE"
��7:�47,4)"ISLAND"
��8:�64,4)"'NEW' HOLE"
�9:�47,5)"INSERT TREES"�30
�10:�64,5)"VIEW HOLE"�30
�11:�30,4)"ALTER PAR"
�12:�30,5)"ALTER No."�30
(�13:�9,5)"EXIT EDITOR"�30
2�
<�128+11:�13
F�
P
Z��chooseob
d
dob%=�
n�
x
�showcols
�)�15:�2,2)"HOLED OUT COURSE DESIGNER"
��6,3)"EDITING "Course$
�
��T%=1�13:�shsc(T%,�):�
� ob%=�
�odob%=1
�obob%=0
��
� *FX15
�ȗX%,Y%,K%
��Y%+640>193�Y%+640<224�
�dob%=(X%-48+island+len)�176
��island<0�dob%>0dob%=�
��green �dob%=2dob%=�
�tee �dob%=6dob%=�
%�(X%-48+island+len)�176>112dob%=�
�dob%<>� �sc2(�,dob%)
"(�dob%<>odob%�sc2(�,odob%):odob%=dob%
,�K%�dob%<>� �
6ob%=dob%
@�showchosen:�OB%(ob%):�7
J�12
T�
^�
h �dob%<>�:�sc2(�,dob%):dob%=�
r�
|
�ob%=�
�bX%=(X%-160+island+len)
�
bob%=�
�A�Y%<-574�Y%>-606�bX%>610�bX%<800:bob%=9:�K%�inserttrees:��:�0
�@�Y%>-577�Y%<-544�bX%>610�bX%<704:bob%=7:�K%�drawisland:��:�0
��island<0��T\L
�H�Y%>-577�Y%<-544�bX%>334�bX%<480:bob%=11:�K%�getpar:�redisplay:��:�0
�K�Y%>-606�Y%<-574�bX%>334�bX%<480:bob%=12:�K%�getholeno:�redisplay:��:�0
�B�Y%>-513�Y%<-481�bX%>334�bX%<541�NO%>1:bob%=1:�K%�delete:��:�0
�A�Y%>-545�Y%<-512�bX%>334�bX%<526�NO%>1:bob%=2:�K%�alter:��:�0
�@�Y%>-513�Y%<-481�bX%>610�bX%<782:bob%=3:�K%�savecourse:��:�0
�A�Y%>-513�Y%<-481�bX%>880�bX%<1056:bob%=4:�K%�loadcourse:��:�0
�>�Y%>-545�Y%<-512�bX%>610�bX%<752:bob%=5:�K%�readhole:��:�0
�@�Y%>-545�Y%<-512�bX%>880�bX%<1040:bob%=6:�K%�writehole:��:�0
��Y%<-574�Y%>-606�bX%>888�bX%<1024:bob%=10:�K%Ineditor=�:�drawmap(0):Ineditor=�:�4:�setmainv:�startup2:�redisplay:�"FX229,1":��:�0
�X�IFY%<-574ANDY%>-606ANDbX%>610ANDbX%<800:bob%=9:IFK%PROCinserttrees:UNTILTRUE:UNTIL0
�<�Y%<-574�Y%>-606�bX%>2�bX%<172:bob%=13:�K%exit=�:��:��:�
@�Y%>-577�Y%<-544�bX%>610�bX%<704:bob%=7:�K%�drawisland:��:�0
<�Y%>-577�Y%<-544�bX%>880�bX%<1040:bob%=8:�K%�newit:��:�0
&�bob%<>obob%�shsc(obob%,�):obob%=0
&!�bob%�shsc(bob%,�):obob%=bob%
0�
:&�PRINTTAB(0,4)Y%,X%-48+island+len;
D�ob%<>�
NCO%(NO%)=OB%(ob%)
X�ob%=6�drawtee:�0
b�ob%=2�drawgreen:�0
l��
v�
�
���sc2(C%,dob%)
�
�dob%=� �
�(�C%=0�((dob%=2�green)�(dob%=6�tee))�
�/�C% �128+11:�OB%(dob%) � �128+OB%(dob%):�11
��dob%*11+2,0)OB$(dob%);
��128+11:�13
��
�
���drawisland
�island=island �-348
��redisplay
��
��newit
�A$
*FX229
*�:��:�tXM
4�
>&�"NEW ---- ARE YOU SURE [Y/N] ?"�7
Hj�8:�'"'NEW' WILL PRODUCE A BLANK HOLE TEMPLATE DESTROYING THE CURRENT HOLE DATA"'"ESCAPE TO ABORT":�13
R *FX15
\S�:A$=�(0):�A$<>"":� BUG IN BASIC PREVENTS USE OF GET WITH A LOCAL ERROR HANDLER
f�A$<>"Y"�A$<>"y"�
ptee=�:green=�
z�inputlength
�NO%=1:NT%=�
� �grid
�
�*FX229,1
��
�
���writehole
��gp%,tp%
��
�%�"WRITING HOLE ";mappoint%�&300+1
��"ARE YOU SURE [Y/N] ?"�7
�>�8:�'"IT IS NECCESSARY TO WRITE THE HOLE DATA INTO MEMORY"
�E�"BEFORE IT CAN BE SAVED TO DISC OR BEFORE USING 'VIEW HOLE'":�13
� *FX15
*FX229
�:��:�tLO
�
$A$=�(0)
.�A$<>""
8�A$<>"Y"�A$<>"y"�tLO
BP%=0
L\�verify:�P%>&2E8 �7:�"ERROR MEMORY ABOUT TO BE OVERWRITTEN!!"'"PRESS SPACE":���=32:�tLO
Vgp%=0:tp%=0
`�T%=1�NO%-1
j�CO%(T%)=&107 tp%=�
t�CO%(T%)=5 gp%=T%
~�
�p�gp%=� �:�8:�0,1)"THERE IS NO GREEN THEREFORE I CAN'T WRITE THIS HOLE!"'"PLEASE PRESS SPACE"�7:���-99:�tLO
�n�tp%=� �:�8:�0,1)"THERE IS NO TEE THEREFORE I CAN'T WRITE THIS HOLE!"'"PLEASE PRESS SPACE"�7:���-99:�tLO
�� gp%<>NO%-1�
�X%=gp%:�delete2
��drawgreen2
��
�3P%=mappoint%+&2E8:�wrimap(teeY%):�wrimap(teeX%)
�P%=mappoint%
�TA%=�("&"+�(�distance(teeX%,teeY%))):map?(P%+&2FA)=A%:map?(mappoint%+&2FB)=A%�256
�map?(P%+&2F9)=par
�&map?(P%+&2F8)=holep �19-(holep>18)
��wrimap1(NT%+1)
�T%=0�NT%
�wrimap(TRX%(T%))
�wrimap(TRY%(T%))
�
(�wrimap1(NO%)
2�T%=0�NO%-1
<C%=CO%(T%):�C%=2C%=1
F�wrimap1(C%)
P�wrimap1(PTS%(T%))
Z�I%=0�PTS%(T%)
d�wrimap(HX%(T%,I%))
n�wrimap(HY%(T%,I%))
x�
��
�
�*FX229,1
��
�
���verify
� P%+=1
�
�T%=0�NT%
� P%+=2
� P%+=2
��
� P%+=1
��T%=0�NO%-1
� P%+=2
�I%=0�PTS%(T%)
P%+=2
P%+=2
"�
,�
6�
@
J��wrimap1(A%)
Tmap?P%=A%:P%+=1
^�
h
r��wrimap(A%)
|A%=A%*21
�map?P%=A%:P%+=1
�map?P%=A%>>8:P%+=1
��
�
���getholeno
��n%
�
*FX229
��:�� �TfQ
��
��
��8:�0,2)"CURRENT HOLE No. IS ";holep'"CHANGING THE HOLE No. IS A WAY OF COPYING ONE HOLE TO ANOTHER"'"ESCAPE TO ABORT":�13
� *FX15
�3�0,0)"WHAT IS THE NEW HOLE No. {1 TO 18} ? "n%
�n%>0�n%<19
holep=n%
mappoint%=(holep-1)*&300
&
�*FX229,1
0�
:
D��readhole
N
*FX229
X�:�� �d|R
bgreen=�:tee=�
l�
v�
� *FX15
���8:�0,2)"THE EXISTING HOLE DATA WILL BE LOST IF IT HAS NOT BEEN WRITTEN INTO"'"MEMORY BY FIRST SELECTING THE 'WRITE HOLE' OPTION!"
��"ESCAPE TO ABORT":�13
�:�0,0)"WHICH HOLE DO YOU WISH TO EDIT {1 TO 18} "holep
��holep>0�holep<19
���readhole2
�P%=(holep-1)*&300
�&len=(�(�~((map!(P%+&2FA))�&FFFF)))
�par=map?(P%+&2F9)
�mappoint%=P%
�5P%=mappoint%+&2E8:teeY%=�map2 �21:teeX%=�map2 �21
�=稤distance(teeX%,teeY%)<>len len=��distance(teeX%,teeY%)
�P%=mappoint%
mem=&2E8
tee=�:green=�
NT%=�map1-1
�T%=0�NT%
*TRX%(T%)=�map2 �21
4TRY%(T%)=�map2 �21
>
mem-=4
H�
R
\NO%=�map1:mem-=1
f�T%=0�NO%-1
pCO%(T%)=�map1:mem-=1
z�CO%(T%)=5green=�
��CO%(T%)=1CO%(T%)=2
�
�PTS%(T%)=�map1:mem-=1
��I%=0�PTS%(T%)
�HX%(T%,I%)=�map2 �21
�HY%(T%,I%)=�map2 �21
�
mem-=4
��
�C� CO%(T%)=7�PTS%(T%)=3��(HY%(T%,1)-teeX%)<45 tee=�:CO%(T%)=&107
��
�
�startup2
��redisplay
�
�*FX229,1
�
��loadcourse
$�colours(9):�screenbox
.ȗ�530,512:ȗ�
8Ineditor=�
B�getcourse("EDIT")
LIneditor=�
V�colours(12)
`
�setmainv
j&mappoint%=0:map?(mappoint%+&2F8)=1
tlen=500:par=4:�startup
~�grid:�:tee=TRUE
�ȗ�
��
�
���savecourse
��Pointer,R0
�� Pointer 28
�($Pointer="<Obey$Dir>.MODULES.SHOOSH"
�
*FX229
��
�u���<>17:�redisplay:�26:�meswind2(" "+�$+" ","PLEASE","PRESS SPACE",1,3):���-99:��24,16;272;1263;1007;:�TXU
��
�ș"OS_File",5,Pointer � R0
�R0<>0 �
e�meswind2("I CAN'T SAVE TO THE DESIGNER DISC","PLEASE INSERT ANOTHER DISC","AND PRESS SPACE",1,3)
���-99
�
( �R0=0
2g��:�redisplay:�meswind2(" "+�$+" ","PLEASE","PRESS SPACE",2,3):���=32:�redisplay:�=17:�TXU
<
*MOUNT
Fȑ0,128
P�
ZB�centbox(�,�13," ")+"CURRENT DISC CATALOGUE"+�13," "),8,20):�8
d�24,16;272;1263;1007;
n�GCOL128+11:CLG:GCOL128+6
x�28,17,21,62,3,4
�file$=""
��:�14:*.
�
�15:*FX15
�"�'"PLEASE ENTER COURSE NAME.";
�+ș"OS_ReadLine",Pointer,10,32,126 � ,R0
��R0=0 �0
�Pointer?(R0+1)=13
�file$=$Pointer
��T%=1�R0
�&�file$,T%,1)=" " �file$,T%,1)="_"
��
�
�file$>""
��T%=1��file$
)�("SAVE $."+file$+" "+�~map+" +3600")
�("SETTYPE $."+file$+" C1F")
�*FX229,1
"�redisplay
,�
6
@��inserttrees
J
�*FX229,1
T�flag,C%
^�:�butt(0)
h!�"INSERT OR DELETE TREES"':�8
r�"LEFT BUTTON TO INSERT"
|�"MIDDLE BUTTON TO DELETE"
��"RIGHT BUTTON TO EXIT"
�*�"MAXIMUM OF 96 TREES PER HOLE"�30:�13
��
�ȗX%,Y%,K%
�
X%=X%�6*6
�
Y%=Y%�6*6
�C%=�X%,Y%)
�#�40,1);NT%+1;" TREES INSERTED"
�#�40,2)"&";~mem;" BYTES LEFT "
�)�distance(-X%/1.5,-Y%/1.5)<40�K%=4�0
��(C%=6�C%=0)�K%=4�0
�
�K%=4�
��NT%<95�
�mem>4�
NT%+=1
�14
&ȏȐX%,Y%,8
0'TRX%(NT%)=-Y%/1.5:TRY%(NT%)=-X%/1.5
:
mem-=4
D�butt(0)
N��7
X�
b�
l�
v
�K%=2�
��NT%>� �
�
flag=�
�
�T%=0�NT%
�C�(-TRY%(T%)*1.5-X%)<12��(-TRX%(T%)*1.5-Y%)<12flag=T%+1:T%=1000
��
��flag �
��flag<>NT%+1�
��T%=flag-1 �NT%-1
�+TRX%(T%)=TRX%(T%+1):TRY%(T%)=TRY%(T%+1)
��
��
�
NT%-=1
�
mem+=4
�redisplay
�butt(0)
�
��7
*�
4�
> �K%=1
H�butt(0)
R*FX229,0
\�
f
p
��drawtee
z
�tee �7:�
�9�mem<18�"NOT ENOUGH MEMORY!! PRESS SPACE:"�7:���=32:�
��butt(0)
�6�8:�1,2)"POSITION TEE THEN ANY BUTON TO EXIT":�11
� tee=�
��x%,y%,a%,b,c,d%,e%
�a%=180:y%=0:x%=-len*1.5
�ȗ�x%,y%
��
�ȗX%,Y%,K%
��Y%>y%�a%>160a%-=1
��Y%<y%�a%<200 a%+=1
�x%=(��a%*len)*1.5
�y%=(��a%*len)*1.5
ȗ�x%,y%
�K%
X%=-x%/1.5:Y%=-y%/1.5
$HX%(NO%,0)=Y%:HY%(NO%,0)=X%
.-P%=mappoint%+&2E8:�wrimap(Y%):�wrimap(X%)
8len=��distance(X%,Y%)
Bb=��a%:c=��a%
L6HX%(NO%,0)=b*-10+-c*20+Y%:HY%(NO%,0)=c*-10+b*20+X%
V4HX%(NO%,1)=b*10+-c*20+Y%:HY%(NO%,1)=c*10+b*20+X%
`6HX%(NO%,2)=b*10+-c*-20+Y%:HY%(NO%,2)=c*10+b*-20+X%
j8HX%(NO%,3)=b*-10+-c*-20+Y%:HY%(NO%,3)=c*-10+b*-20+X%
tteeX%=X%:teeY%=Y%
~mem-=18
�PTS%(NO%)=3
�
NO%+=1
��redisplay
��
�
���alter
�*�x%,y%,x1%,y1%,x2%,y2%,x3%,y3%,flag,C%
�
*FX229
�"�:�� �redisplay:�"FX229,1":�
��:�8:�0,2)"THE OVERALL SHAPE AND POSITION OF AN OBJECT CAN BE ADJUSTED"'"BUT NOT THE NUMBER OF EDGE POINTS."'"ESCAPE TO ABORT":�13
��
��findone:�redisplay
B�0,0)"SELECT AND MOVE POINTS TO THEIR REQUIRED POSITIONS "
=� 8:�0,4)"RIGHT BUTTON TO EXIT"'"ESCAPE TO ABORT"�30:�13
�CO%(X%)=5�7:�0
��
(�outline
2�butt(0)
<�
F�
Pȗx%,y%,K%
Z
flag=�
d�K%�
n�T%=0�PTS%(X%)
xB�(-HY%(X%,T%)*1.5-x%)<12��(-HX%(X%,T%)*1.5-y%)<12flag=�:x%=T%
��
��
�&�K%=1��:��:�redisplay:�"FX229,1":�
� �flag
�"x1%=-HY%(X%,x%�PTS%(X%)+1)*1.5
�"y1%=-HX%(X%,x%�PTS%(X%)+1)*1.5
�T%=x%-1:�T%<1T%=PTS%(X%)
�x2%=-HY%(X%,T%)*1.5
�y2%=-HX%(X%,T%)*1.5
�x3%=-HY%(X%,x%)*1.5
�y3%=-HX%(X%,x%)*1.5
��3,8
��x%<>0�
�
Ȗ:Ȗ
�x1%,y1%,x3%,y3%
"�x3%,y3%,x2%,y2%
,ȏx3%,y3%,8
6�
@ȗx3%,y3%,K%
Jx3%=x3%�6*6
Ty3%=y3%�6*6
^1�58,0)"Y ";-�(x3%/1.5),"X ";�(y3%/1.5);" "
h*FX112,2
rC%=�x3%,y3%)
|*FX112,1
�&�IFC%<>7ANDBEAT=0:SOUND1,-15,120,4
�D�K%=0��((C%=7�island>0)�(island<0�x3%>600�x3%<900��y3%<220))K%=4
�=�K%=0�(C%=7�island>0)�(island<0�x3%>600�x3%<900��y3%<220)
��x1%,y1%,x3%,y3%
��x3%,y3%,x2%,y2%
�ȏx3%,y3%,8
� �K%=0
��
��
� Ȗ:Ȗ
�ȏx3%,y3%,8
��
�ȗx3%,y3%,K%
x3%=x3%�6*6
y3%=y3%�6*6
1�58,0)"Y ";-�(x3%/1.5),"X ";�(y3%/1.5);" "
&*FX112,2
0C%=�x3%,y3%)
:*FX112,1
D&�IFC%<>7ANDBEAT=0:SOUND1,-15,120,4
ND�K%=0��((C%=7�island>0)�(island<0�x3%>600�x3%<900��y3%<220))K%=4
X=�K%=0�(C%=7�island>0)�(island<0�x3%>600�x3%<900��y3%<220)
bȏx3%,y3%,8
l �K%=0
v�
��58,0)" "
�HY%(X%,x%)=-x3%/1.5
�HX%(X%,x%)=-y3%/1.5
��redisplay
��outline
��0
��
�
�
��outline
��0,8
�"�-HY%(X%,1)*1.5,-HX%(X%,1)*1.5
��I%=1�PTS%(X%)
$�-HY%(X%,I%)*1.5,-HX%(X%,I%)*1.5
�
"�-HY%(X%,1)*1.5,-HX%(X%,1)*1.5
�I%=1�PTS%(X%)
*'ȏ-HY%(X%,I%)*1.5,-HX%(X%,I%)*1.5,8
4�
>%ȏ-HY%(X%,0)*1.5,-HX%(X%,0)*1.5,8
H�
R
\��delete
f�
p
*FX229
z��8:�0,2)"CLICKING ON ONE OF THE RED OBJECT CENTRES WILL RESULT IN THAT OBJECTS"'"DELETION. PLEASE TAKE CARE!"'"ESCAPE TO ABORT":�13
��:�� �redisplay:�Tn]
��findone
�
��delete2
��CO%(X%)=5green=�
��CO%(X%)=&107 tee=�
�mem=mem+6+PTS%(X%)*4
��X%<>NO%-1�
��T%=X%+1�NO%
��I%=0�PTS%(T%)
�HX%(T%-1,I%)=HX%(T%,I%)
�HY%(T%-1,I%)=HY%(T%,I%)
��
�CO%(T%-1)=CO%(T%)
PTS%(T%-1)=PTS%(T%):�
�
NO%-=1
$�redisplay
.
�*FX229,1
8�
B
L
��findone
V�:�� �
`G�0,0)"THERE ARE ";NO%-1;" OBJECTS DEFINED. SELECT A CENTRE POINT"
j�8
t�T%=1�NO%-1
~%ȏ-HY%(T%,0)*1.5,-HX%(T%,0)*1.5,8
��
��
�ȗX%,Y%,K%
�
flag=�
��K%�
��T%=1�NO%-1
�M�(�(-HY%(T%,0)*1.5-X%))<12�(�(-HX%(T%,0)*1.5-Y%))<12flag=�:X%=T%:T%=NO%-1
��
��
� �flag
��
�
��redisplay
�26:*FX112,2
�:�7
ȑisland+len,640
( �-HY%(0,0)*1.5,-HX%(0,0)*1.5
2�I%=1�PTS%(0)
< �-HY%(0,0)*1.5,-HX%(0,0)*1.5
F%�85,-HY%(0,I%)*1.5,-HX%(0,I%)*1.5
P�
Z#�85,-HY%(0,1)*1.5,-HX%(0,1)*1.5
d*FX112,1
n!�26,24,12;268;1267;1011;4:�:�
xȑisland+len,640
���redisplay2
���134:�12:�2,1);len;" YARDS : PAR ";par;" : HOLE No. ";map?(mappoint%+&2F8);" : T X ";:P%=mappoint%+&2E8:�;�map2 �21;" : T Y ";�map2 �21;" : Memory &";~mem
��28,1,30,78,25:�139:�:CLS
��NO%>0�
��T%=0�NO%-1
��CO%(T%)
�"�-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
��I%=1�PTS%(T%)
�"�-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
�'�85,-HY%(T%,I%)*1.5,-HX%(T%,I%)*1.5
��
�%�85,-HY%(T%,1)*1.5,-HX%(T%,1)*1.5
�@�CO%(T%)=&107 �CO%(T%)=5 �12:Ȓ-HY%(T%,0)*1.5,-HX%(T%,0)*1.5
�
�
�NT%>� �
"�14
,
�T%=0�NT%
6%ȏȐ-TRY%(T%)*1.5,-TRX%(T%)*1.5,8
@�
J�
T �grid
^�
h
r��drawgreen
|�green �7:�
�9�mem<54�"NOT ENOUGH MEMORY!! PRESS SPACE:"�7:���=32:�
���drawgreen2
�green=�
�
mem-=2
�HX%(NO%,0)=0
�HY%(NO%,0)=0
�
mem-=4
�CO%(NO%)=5
�PTS%(NO%)=0
��0,0
��T%=0�330�30
�PTS%(NO%)+=1
�
mem-=4
�0,0
HX%(NO%,PTS%(NO%))=��T%*25
HY%(NO%,PTS%(NO%))=��T%*25
&7�85,-HY%(NO%,PTS%(NO%))*1.5,-HX%(NO%,PTS%(NO%))*1.5
0�
:'�85,-HY%(NO%,1)*1.5,-HX%(NO%,1)*1.5
D
NO%+=1
N�redisplay
X�
b
l ��mou
v�C%
��
�ȗX%,Y%,K%
�
X%=X%�6*6
�
Y%=Y%�6*6
��ob%>2�ob%<6�
��(X%/1.5)<-(len-(�(Y%�6)))�
�X%=-(len-(�(Y%�6)))*1.5
�
X%=X%�6*6
�ȗ�X%,Y%
��
��
�/�58,0)"Y ";-�(X%/1.5),"X ";�(Y%/1.5);" "
��58,2);~mem;" BYTES LEFT"
! �58,3);NO%;" OBJECTS DRAWN"
!*FX112,2
!C%=�X%,Y%)
! *FX112,1
!*�C%<>7�K%�Ə=0:�1,-15,120,4
!4;�(C%=7�island>0)�(ob%=0�island<0�X%>600�X%<900��Y%<220)
!>�
!H
!R
��req(A$)
!\�28,1,30,20,30:�
!f�8:�A$;
!p�28,1,30,78,25,7
!z�
!�
!���showcols
!��
!��T%=0�6
!��OB%(T%):�T%*11+2)OB$(T%);
!��
!��
!���showchosen
!��:�OB%(ob%)
!��0,0)"DRAWING "OB$(ob%)
!��
!�
!���instruct
"�colours(9):�screenbox
"C�quest("DO YOU REQUIRE INSTRUCTIONS?","YES","NO",0):�butt(0):�
"'�colours(12):�mesbox(0,0,1279,1023)
"$�12:ȓ998,640,160,256
".*�1058,896,1066,940:�1090,940:�1098,896
"8�139:�1:Ȑ1078,900
"B�1,240,240,192
"L�2,240,208,208
"V�3,240,240,224
"`�1:ȓȐ1000,644,156,248
"j�3:ȓȐ1000,644,156,124
"t�T%=0�2
"~�12:ȓ1012+T%*50,800,32,64
"��2:ȓȐ1014+T%*50,804,28,56
"�!�12:�1020+T%*50,850:�5:�;T%+1
"�
�:�4:�
"��139:�12
"��28,2,30,78,3
"���0,0)"Game control in the Archimedes version of ";:�9:�"HOLED OUT";:�12:�" is via"'"the MOUSE, the keys are numbered as indicated on the right."
"�T�'"The differences to the instructions as shown in the manual"'"are as follows:"
"�B�'"STROKEPLAY/"�16)"There can be up to 6 players in any round"
"؈�'"GAME CONTROLS/"''"1. SELECT CLUB. Use the MOUSE to indicate the club required then"�16)"press any button to go to the next stage"
"�G�'"2. DIRECTION. Position the cursor with the MOUSE then either."
"�.�(16)"Press [2] to go to the next stage."
"�3�(16)"Press [1] or [3] to select another club"
# Q�'"3. POWER."�16)"As soon as the direction has been selected by pressing [2]"
#
0�16)"the bar indicator will start to move."
#/�16)"Pressing [2] will give a Normal shot"
#/�16)"Pressing [1] will give a Hooked shot"
#(/�16)"Pressing [3] will give a Sliced shot"
#2O�'"To read courses from alternate discs simply insert the disc when in the"
#<'�"COURSES window and press ESCAPE."
#F(�'�22)"PRESS ANY BUTTON TO CONTINUE"
#P�butt(0)
#Z!�:ȗX%,Y%,K%:�K%:�1,-10,200,1
#d�butt(0)
#n�28,2,30,78,1
#x �:�14
#�
#�"�'"Operation of the EDITOR :-"
#��12
#�P�'"The main EDITOR panel consists of a plan of the hole being edited and an"
#�>�"Options window. The options are split into two groups."
#�Q�'"The first contains 7 different coloured drawing options which are used to"
#�H�"draw the various objects on the hole {Green, Fairway, Water ect}."
#�L�'"The second group are all coloured red and control the EDITOR actions"
#�R�"{Load and Save files, Object deletion ect} all these actions have their own"
#�R�"Help text. The best way to discover their operation is to try them out for"
#��"yourself."
#�O�'"All course files are saved in the $ directory on drive :0 and it is not"
#�R�"possible to save files to the EDITOR disc. There are no special actions to"
$Q�"read or write to another disc simply insert the disc before selecting Load"
$�"or Save."
$R�'"Before you can 'SAVE' a hole as part of a course or 'VIEW' a hole you must"
$"H�"use the 'WRITE HOLE' option to store the data into course memory."
$,P�'"When SAVING a course to disc you can use spaces in the file name so that"
$6��"names such as 'PINE ISLES' are quite acceptable, The spaces will be replacedby underline characters when the file is saved and restored on loading."
$@)�''�22)"PRESS ANY BUTTON TO CONTINUE"
$J�butt(0)
$T!�:ȗX%,Y%,K%:�K%:�1,-10,200,1
$^�butt(0):�
$h!�"Operation of the EDITOR :-"
$rR�'"It is possible to draw one object over the top of another, so some thought"
$|P�"will be required when constructing a hole if the final result is to be as"
$�P�"you visualise it. Placing areas of water or bunkers underneath the green"
$�A�"can have unpredictable results so try to avoid doing this."
$�R�'"If you select the 'ISLAND' option it will toggle the hole plan to the left"
$�P�"of the screen. In this mode you will only be able to draw an island with"
$�Q�"colour 'ROUGH' and position trees on the island. Select 'ISLAND' again to"
$�)�"return to the normal editing mode."
$�M�'"The hole plan is divided into 50 yard squares these should be used in"
$�Q�"conjunction with the club distances on your quick reference card to ensure"
$�J�"that you don't draw an object that is too big to hit the ball over."
$�K�'"At the top of the Hole Plan, the Hole length, Par, Tee X and Tee Y "
$�J�"coordinates and amount of Hole memory remaining are displayed. The"
$�K�"X and Y coordinates are reversed from the normal convention, X being"
$�C�"vertical and Y horizontal, Zero being centred upon the hole."
%M�"If you can't draw an object check that there is enough memory left for"
%�"the operation."
%T�'"Finally you don't have to design all 18 holes before saving a course to disc"
%&P�"so as soon as you have created a hole you can save the course, leave the "
%0H�"editor with the 'EXIT EDITOR' option and test play you own holes!"
%:)�''�22)"PRESS ANY BUTTON TO CONTINUE"
%D�butt(0)
%N!�:ȗX%,Y%,K%:�K%:�1,-10,200,1
%X�butt(0)
%b�
%l�
%v��chofsc
%�*FX112,3
%��
%�=�x1%=� ȑ1280,768+O%-6166*green%:�ȑ0,768+O%-6166*green%
%�P%=rough
%��map1:�drawit
%��map1:�drawit
%�P%=water:�6:�drawit
%�G%=�xs%,ys%)
%��G%=6�G%=11W%=�
%�*FX112,1
%��
%��
%�
��preview
&�
&�colours(9):�screenbox:ȗ�
&lhol%=�choseahole
& �lhol%�drawmap(lhol%)
&*�lhol%=�
&4�
&>�
&H��drawmap(holeno%)
&R�Ineditor ��*FX229,1
&\�initcloud
&fli%=2:�initwind
&p(�r%,l%,OL%,A%,AA%,T%,I%,SP%,X%,Y%,A$
&zX%=640:Y%=512
&��
&�P%=mappoint%+holeno%:SP%=P%
&�&OL%=(�(�~((map!(P%+&2FA))�&FFFF)))
&�
AA%=�map1
&�
�A%=1�AA%
&�l%=�map2/10.5
&�r%=�map2/10.5
&�x%(A%)=r%:y%(A%)=l%
&��
&�I%=�map1-1
&�"T%=�map1:T%=�map1:P%=P%+T%*4+4
&�l%=0:r%=0:t%=0:b%=0
&� �colours(12):�screenbox:�137
'&�mesbox(532-OL%,294,OL%*2+212,692)
')�26,24,548-OL%;310;548+OL%+180;970;:�
'ȑ592+OL%,640
'$�T%=1�I%:�map1
'.
np%=�map1
'8%�map2(CX%,CY%,4):�map2(SX%,SY%,4)
'B,�I%=1�np%-1:�map2(XI%,YI%,85):�CX%,CY%:�
'L�85,SX%,SY%
'V �:�14
'`8�T%=1�AA%:�-x%(T%),-y%(T%))<>6ȏȐ-x%(T%),-y%(T%),8
'j�:�0:Ȓ0,0
't�26
'~V�smallmes(144,166,12,"POSITION POINTER ON VIEWPOINT THEN PRESS THE MIDDLE BUTTON")
'�.�Ineditor A$="EDITOR":�:A$="HOLE SELECTOR"
'�*A$="RIGHT BUTTON TO RETURN TO THE "+A$
'�!�smallmes(608-�A$*8,66,12,A$)
'�ȗ�:ȗ�X%,Y%
'��
'�!ȗȓ548-OL%,310,OL%*2+180,660
'�ȗX%,Y%,T%
'�'�X%<688�r%=(688-X%)�8�r%=(X%-688)�8
'�)ȗȓ548-OL%,310+r%,OL%*2+180,660-r%*2
'�y%=((592+OL%)-X%)�2
'�x%=(640-Y%)�2
'�
( E�T%=4P%=SP%+&2E8:X%=�map2:Y%=�map2:�displayview2(X%,Y%,SP%):��:��
(
&�T%=2�displayview(X%,Y%,SP%):��:��
(
�T%:��
(�
((�
(2��displayview(X%,Y%,SP%)
(<YY%=(((592+OL%)-X%)�2)*21
(FX%=((640-Y%)�2)*21
(Pȗ�
(Z�A$,mappoint%:mappoint%=SP%
(d��displayview2(X%,YY%,SP%)
(n�X%<42��YY%<42X%=42:YY%=42
(x7OL%=(�distance(X%,YY%)):green%=(OL%<525):OL%=OL%/21
(�.A$=Course$+" HOLE "+�(holeno%�&300+1)+", "
(�7�green% A$=A$+�(OL%*3)+" FEET":�A$=A$+�OL%+" YARDS"
(�A$=A$+" FROM HOLE"
(�
�light
(��sine(X%,Y%)
(��drawscreen
(�/�26:X%=640-�A$*8-24:�smallmes(X%,860,13,A$)
(��butt(0)
(��ȗX%,Y%,SP%:�SP%
(��butt(0)
(��
(��
(���map2(� x%,� y%,p%)
)!y%=-�map2/10.5:x%=-�map2/10.5
)
�p%,x%,y%
)�
)"�
),ݤchoseahole
)6�butt(0)
)@�X%,Y%,K%,F%,N%,out%
)J,�centbox(�,"PLEASE SELECT A HOLE",12,10)
)T&�mesbox(464,444,148,100):�dono2(1)
)^�mesbox(704,536,80,80)
)h �smallmes(704,462,12,"EXIT")
)r�mesbox(704,368,80,80)
)|%�15:�744,600:�720,554:�85,768,554
)�2�744,388:�720,432:�85,768,432:�720,436,768,436
)� �8:�720,432,744,388:�768,432
)��720,558,744,600:�768,558
)�ȗȓ480,388,432,220
)�N%=1:�:ȗX%,Y%,K%
)��K%�
)��X%>716�
)��X%<772�
)�6�Y%>544N%=N%�18+1:�dono2(N%):�1,-10,200,1:�butt(0)
)�A�Y%<442N%-=1:N%=N%-(N%=0)*18:�dono2(N%):�1,-10,200,1:�butt(0)
)��
)�*�Y%>472�Y%<516out%=�:F%=�:�1,-10,200,1
)��
*�X%<604�
*�Y%>456�Y%<540F%=�
*�
*&�
*0 �F%=�
*:=((N%-1)*&300)�out%
*D�
*N��dono2(A%)
*X�A$,T%:A$=�(A%)
*b�11:ȓȐ476,464,124,64
*l�476-32*(A%<10),520
*v)�12:�T%=1��A$:�double(�(�A$,T%,1))):�
*��
*��
*���getoptions
*��T%=1�6:jump%(T%)=T%:�
*�*CHANNELVOICE 1 1
*��:�
*��colours(9):�screenbox
*�ȗ�640,496
*�\�quest("EDIT HOLES OR PLAY ROUND?","PLAY","EDIT",0)�getcourse("EDIT"):�edit:�"FX229":��
*��butt(0):*FX229
*�:mappoint%=0:�getcourse("PLAY"):mapstart%=map+mappoint%
*�M�quest("PREVIEW HOLES OR PLAY ROUND?","PLAY","PREVIEW",0)�preview:��:���
*�hplay%=�quest("UNDER WHICH RULES ARE YOU TO PLAY?","MATCH PLAY","STROKE PLAY",0)+1:� 1=MATCH 2=STROKE
+noofplayers=�noplaying
+�T%=1�noofplayers
+�getname(T%)
+ Qhand%(T%)=1-�quest("IS "+name$(T%)+" LEFT OR RIGHT HANDED?","LEFT","RIGHT",0)
+*�getskill(T%)
+4�
+>�confirm(noofplayers)�0
+H��
+R7� CHANGE THE FOLLOWING NUMBER TO (HOLE NO. -1)*&300
+\�mappoint%=&2400
+f�
+p
+z��getcourse(E$)
+��N%,I%,T%,C%,C$,E%,X,Y,Z
+�*FX21,9
+��butt(0):*FX229
+�~�:��:�<>17�centbox(�," "+�$+" ",8,1):ȑ0,-256:�centbox(�,"PLEASE PRESS SPACE",8,1):ȑ0,0:���-99:��Ineditor:�"FX229,1":�
+� *FX15
+�C%=1:E%=-368:I%=0
+��
+��readdir
+�
�I%=0�
+� *FX15
+�;�centbox(�,"NO COURSES ON THIS DISC!",5,1):�7:N%=�(300)
+�>ȑ0,-256:�centbox(�,"PLEASE PRESS SPACE",8,1):ȑ0,0:���-99
+��
,
�I%<>0
,N%=((I%+1)�2*36)�32
,1�centbox(�,"COURSES AVAILABLE TO "+E$,5,N%+2)
,$T%=512-I%�2*18
,.ȗȓ272,T%-24,736,I%*18
,8�N%=1�I%
,B�showcat(N%,8+(N%=1)*2)
,L�
,VOX=1
,`�
,jȗX,Y,Z
,t'X=-(X>640)+((T%-20+I%*18)-Y)�36*2+1
,~
�X>I%X=I%
,�,�X<>OX �showcat(OX,8):�showcat(X,6):OX=X
,��Z
,�Course$=�no_s(F$(X))
,��"L. $."+F$(X)+" "+�~map
,�
�*FX229,1
,��
,�
,���showcat(N%,C%)
,��5
,��E%
,��N%�1 E%=-368:� E%=48
,� �3+C%
- /ȓȐ640+E%,T%+I%*18-16-((N%+1)�2)*36,320,32
-
�C%
-%�640+E%,T%+I%*18+12-((N%+1)�2)*36
-�no_s(F$(N%))
-(�
-2
-<ݤno_s(C$)
-F�T%
-P
�T%=1��C$
-Z�C$,T%,1)="_"�C$,T%,1)=" "
-d�
-n=C$
-x
-�
��readdir
-�(�R4,T%,C%,name,Point,buffer,filetype
-�
*MOUNT
-�� Point 11,buffer 34,name 2
-�$name="*":filetype=&C1F
-�$Point="$"+�0:R4=0
-��
-�6ș"OS_GBPB",10,Point,buffer,77,R4,34,name � ,,,,R4
-�0�buffer!&10=1�((!buffer>>8)�&FFF)=filetype �
-�I%+=1:T%=&14
-��
-�C%=buffer?T%
-�T%-=(C%<>0)
.�T%=&1E�C%=0
.buffer?T%=13
.F$(I%)=$(buffer+&14)
."�
.,
�R4=-1
.6�
.@
.J�
.Tݤconfirm(T%)
.^�N%,I%,A$:I%=(T%+(T%�1))
.h�butt(0)
.r�colours(12):�screenbox
.|Z�centbox(�," ARE THE FOLLOWING GAME OPTIONS CORRECT? ",15,10+I%)
.�!�28,10,20+I%�2,69,13-I%�2,4:�
.��12:�139:�;T%;" PLAYER";
.��T%<>1�"S";
.�*�", PLAYING AT ";Course$;", UNDER ";
.�Ȏplay%�
.��1:�"MATCH";
.��2:�"STROKE";
.��
.��" PLAY RULES"
.��0,1)�60,"-")
.�1�6:�0,2)"NAME"�22)"DEXTERITY"�46)"SKILL":�12
.��0,3)�60,"-")
.��0,4);
/
�boardcol
/�N%=1�T%
/ �N%+4
/&�name$(N%)�22);
/0Ȏhand%(N%)�
/:�0:�"RIGHT";
/D�1:�"LEFT";
/N�
/X�" HANDED"�46);
/b A$=�skillname(currents%(N%))
/l�A$
/v�
/��12:��60,"-")
/�$�smallmes(520,368-I%*16,8,"YES")
/�#�smallmes(680,368-I%*16,8,"NO")
/�!ȗȓ536,376-I%*16,208,44:ȗ �
/��
/�ȗX%,Y%,K%
/��(X%<590�X%>692)�K%
/��1,-10,200,1
/�=X%>692
/��
/��
/���boardcol
/��5,208,0,0
0�6,144,128,80
0�7,112,112,112
0�8,240,112,0
0 �9,96,96,48
0*�10,208,80,144
04�
0>�
0H��getskill(T%)
0R�butt(0)
0\�X%,Y%,K%,F%,N%
0f;�centbox(�,"WHAT IS "+name$(T%)+"S SKILL LEVEL?",15,12)
0p3�mesbox(356,464,416,64):�doskill(currents%(T%))
0z�mesbox(820,540,80,80)
0��mesbox(820,372,80,80)
0�%�15:�860,604:�836,558:�85,884,558
0�2�860,388:�836,432:�85,884,432:�836,436,884,436
0� �8:�836,432,860,388:�884,432
0��836,562,860,604:�884,562
0�ȗȓ372,388,514,220
0�N%=1:�:ȗX%,Y%,K%
0��K%�
0��X%>836�
0�8�Y%>544�N%<4N%+=1:�doskill(N%):�1,-10,200,1:�butt(0)
0�8�Y%<442�N%>1N%-=1:�doskill(N%):�1,-10,200,1:�butt(0)
0��
0��X%<780�
1�Y%>475�Y%<514F%=�
1�
1�
1$ �F%=�
1.�1,-10,200,1
18currents%(T%)=N%
1B�
1L�
1V��doskill(T%)
1`�A$
1jA$=�skillname(T%)
1t�11:ȓȐ372,480,12*32,32
1~�12:�372,508:�A$
1��
1��
1�ݤskillname(T%)
1��A$
1� ȎT%�
1��1:A$="BEGINNER"
1��2:A$="ENTHUSIAST"
1��3:A$="AMATEUR"
1��4:A$="PROFESSIONAL"
1��
1�=A$
1��
2 ��getname(T%)
2
�butt(0)
2*�X%,Y%,K%,Q,OX%,OY%,A$,B$:A$=name$(T%)
2�noofplayers>1�
2( ȎT%�
22�1:B$="FIRST "
2<�2:B$="SECOND "
2F�3:B$="THIRD "
2P�4:B$="FOURTH "
2Z�5:B$="FIFTH "
2d�6:B$="SIXTH "
2n�
2x�
2��A$<10A$=A$+�10-�A$," ")
2�6�centbox(�,"WHAT IS THE "+B$+"PLAYERS NAME?",15,8)
2�ȗȓ306,480,634,48
2��smallmes(784,472,11,"OK")
2��smallmes(288,472,11,A$)
2�ȗOX%,OY%,K%:�=1000
2��
2��butt(0)
2�A$=name$(T%)
2��336,516:�A$;
2��139:*FX21
2��
2�2Q=�(0):�Q<>� �(X%<702�K%) �=0:ȗOX%,OY%,K%:ȗ�
3�Q<>127Q=Q �223
3�(Q>64�Q<91)�Q=127�
3+�A$<>10�Q<>127A$=A$+�Q:�Q:�1,-10,200,1
3".�A$<>0�Q=127A$=�A$,�A$-1):�Q:�1,-10,200,1
3,�
36ȗX%,Y%,K%
3@%�>500��(X%-OX%)>8��(Y%-OY%)>8ȗ�
3J�(X%>792�K%)�Q=13
3T5�A$=""�1,-15,125,20:name$(T%)=defname$(T%):�=0:��
3^�1,-10,200,1:��
3h�140:name$(T%)=A$
3rdefname$(T%)=A$
3|�
3��
3�ݤnoplaying
3��butt(0)
3��play%=1�=2
3��X%,Y%,K%,F%,N%
3�)�centbox(�,"HOW MANY PLAYERS?",12,10)
3�$�mesbox(464,444,84,100):�dono(1)
3��mesbox(704,536,80,80)
3��mesbox(704,372,80,80)
3�%�15:�744,600:�720,554:�85,768,554
3�2�744,388:�720,432:�85,768,432:�720,436,768,436
3� �8:�720,432,744,388:�768,432
3��720,558,744,600:�768,558
4ȗȓ480,384,292,220
4N%=1:�:ȗX%,Y%,K%
4�K%�
4&�X%>716�
405�Y%>544�N%<6N%+=1:�dono(N%):�1,-10,200,1:�butt(0)
4:5�Y%<442�N%>1N%-=1:�dono(N%):�1,-10,200,1:�butt(0)
4D�
4N�X%<540�
4X�Y%>456�Y%<540F%=�
4b�
4l�
4v �F%=�
4��1,-10,200,1
4�=N%
4��
4���dono(A%)
4��11:ȓȐ476,468,60,64
4��476,520
4��12:�double(A%)
4��
4��
4�ݤquest(A$,B$,C$,H%)
4�
�L%,D%,R%
4�R%=704+�length(�C$)
4�L%=600-�length(�B$)
5�centbox(�,A$,12,6+H%)
5D%=464-H%*32
5�smallmes(L%,D%,11,B$)
5 �smallmes(704,D%,11,C$)
5*ȗȓL%+16,D%+8,R%-L%-64,48
54ȗ �
5>�butt(0)
5H�:ȗL%,R%,D%
5R�D%�(L%<568�L%>712)
5\�1,-10,200,1
5fD%=-(L%>712)
5p=D%
5z�
5�ݤlength(L%)
5�L%+=3:�(L%�1)-0L%+=1
5�
=L%*32
5��
5���double(C%)
5�C%=128+4*C%
5� �C%,C%+1,8,8,10,C%+2,C%+3,11
5��
5��
5���screenbox
5��M%:M%=�6
5��mesbox(0,0,1279,1023)
5��24,16;16;1263;1007;:�140:�
6��textwind
6�28,1,30,38*M%,1:�140:�
6�
6$�
6.��centbox(cls,A$,C%,H%)
68
�cls �
6B
�T%,I%,M%
6L��=9M%=16�M%=8
6VT%=640-�A$*M%
6`I%=512+H%*16
6j=�mesbox(T%-M%,496-H%*16-20*(H%=1),�A$*M%*2+M%*2,H%*32+32)
6t�C%:�T%,I%-16*(H%=1):�5:�A$
6~�
6��
6���smallmes(x%,y%,C%,A$)
6�
�o%,M%
6���=12M%=16�M%=32
6�o%=(1-(�A$�1))*M%
6�$�mesbox(x%,y%,�A$*M%+M%*2+o%,64)
6�!�12:�5:�x%+M%+o%�2,y%+44:�A$;
6��
6��
6���mesbox(x%,y%,X%,Y%)
6��8:ȓȐx%,y%,X%,Y%
6��3:ȓx%+4,y%+4,X%-8,Y%-8
7 �4:ȓx%+8,y%+8,X%-16,Y%-16
7
#�11:ȓȐx%+12,y%+12,X%-24,Y%-24
7�
7
7(��meswind2(A$,B$,C$,F%,C%)
72*CHANNELVOICE 1 1
7<�26
7F�X%,x%,x2%,c%,I%,Y%
7P!Y%=80-(B$<>"")*48-(C$<>"")*48
7ZX%=(�A$*16+32):x%=640-X%�2
7d�mesbox(x%,800,X%,Y%)
7n �3,C%
7x�5:X%=x%+16
7�x%=640-(�B$*8)
7�x2%=640-(�C$*8)
7��I%=1�F%*2+1
7��X%,772+Y%:�A$
7��B$<>""�x%,724+Y%:�B$
7��C$<>""�x2%,676+Y%:�C$
7��del(50)
7��1,-10,180,1
7��
7��
7��
7���meswind(A$,B$,C$,F%,C%)
7��meswind2(A$,B$,C$,F%,C%)
8�4:�
8�8,0
8*SCHOOSE topofscreen
8"�&ED,0,704
8,
�windows2
86�
8@�
8J��board
8T'totscore%()=totscore%()+currentS%()
8^A�T%=1�noofplayers:holescores%(hsp%(T%),Hole%)=currentS%(T%):�
8h
�boardcol
8r�3,0,144,0:�131:�
8|�winsort
8�!�P%,Y%,T%,I%,S%,mp%,A$,sc%,O%
8�O%=(play%=2)*4:�26
8��0:ȓȐ60,76,1156,920
8��64,0:ȓȐ64,80,1148,128
8��48,0:ȓȐ64,992,1148,-128
8�&�12:�768,544:�1212,992:�85,1212,80
8�"�13:�512,544:�64,80:�85,64,992
8��11:ȓȐ98,112,1080,848
8��0:ȓ98,112,1080,848
8�%�24,100;116;1176;956;:ȑ98,116:�5
8��14:�P%=1�6:Y%=788-P%*132
8��7:�0,Y%+124,1080,Y%+124
8��14:�0,Y%,1080,Y%
9&�T%=40�80�40:�0,Y%+T%,1080,Y%+T%:�
9'�T%=1�8:X%=T%*120:�X%,Y%,X%,Y%+80:�
9�
9&�P%=1�noofplayers
90,mp%=mapstart%+&2F9:Y%=728-(P%-1)*132:�12
9::�I%=0�-40�-40:�T%=0�8:�T%*120+4,Y%+I%:�;?mp%:mp%+=&300
9D �:�:�
9N�P%=1�noofplayers
9X5mp%=mapstart%+&2F9:Y%=728-(P%-1)*132:X%=32:par%=0
9b"�T%=1�Hole%:�T%=10Y%-=40:X%=32
9l7sc%=holescores%(hsp%(P%),T%)-?mp%:par%+=?mp%:�X%,Y%
9vȎ�sc%�
9�� 0:A$="PAR":�15
9�� 1:A$="+"+�sc%:�5
9��-1:A$=�sc%:�0
9��
9���5-�A$," ");A$
9�X%+=120:mp%+=&300
9��
9�5�jump%(P%)+4:�4,768-(P%-1)*132:�name$(P%)�20+O%);
9�Ȏcurrents%(P%)�
9��1:�"{BEGINNER}";
9��2:�"{ENTHUSIAST}";
9��3:�"{AMATEUR}";
9��4:�"{PROFESSIONAL}";
:�
:A�40+O%);totscore%(P%);" STROKE"�(-(totscore%(P%)>1)*83)�53);
:6A$=" : "+�Hole%+" HOLE"+�-(Hole%>1),"S")+" PLAYED"
: Ȏplay%�
:*
�1:�match
:4�2:�stroke
:>�
:H�
:R �15:T%=542-�A$*8:�T%,824:�A$
:\�12:ȓT%-8,788,�A$*16+14,48
:f)�26:�smallmes(360,32,11," CONTINUE ")
:p%�smallmes(720,32,11,"QUIT ROUND")
:z�
:�ȗȓ372,44,528,40
:�ȗ�:ȗ�464,64
:��butt(0):�=0:���>100
:��:ȗX%,Y%,T%
:��T%�(X%<556�X%>718)
:�D�X%>718�confirm:�X%>926�0,0:�("SCHOOSE topofscreen"):�&ED,0,0:�0
:���
:��0:�4:�
:�ȗ�
:��139
:��
:��
:�
��confirm
;�butt(0)
;�gtos(0)
;�mesbox(640,32,512,160)
;$1�8:�656,176:�"ARE YOU SURE YOU WANT TO QUIT?"
;.�smallmes(794,60,8,"YES")
;8�smallmes(916,60,8,"NO")
;Bȗȓ806,72,178,40:ȗ�890,82
;L�:ȗX%,Y%,T%
;V�T%�(X%<866�X%>926)
;`�
;j�
;t��match
;~�T%,B$,S1%,S2%
;��T%=1�Hole%
;�;� holescores%(hsp%(1),T%)<holescores%(hsp%(2),T%)S1%+=1
;�;� holescores%(hsp%(2),T%)<holescores%(hsp%(1),T%)S2%+=1
;��:T%=�(S2%-S1%)
;�%B$=�(T%):�T%B$=B$+" UP"�B$="EVEN"
;�B$=�14-�B$," ")+B$
;� ȎP%�
;��1:�S1%>=S2%�B$
;��2:�S2%>=S1%�B$
;��
;�!A$=Course$+" : MATCH PLAY"+A$
;��
<