start bastext 16385 start tok128 d64-ukS6bM 1 PRINTCHR$(147);CHR$(8);:CLR:v=53248:cm=55296:vd=1024 2 POKE53265,PEEK(53265)OR64 3 POKE53280,0:POKE53281,0:POKE53282,3:POKE53283,1:POKE53284,12:POKE53272,19 4 DEFFNpx(x)=24+(x-1)*24:DEFFNpy(y)=51+(8-y)*24:DIMab(8,8),bb(7,7) 5 FORa=1TO8:FORb=1TO8:ab(a,b)=1/(ABS(4.5-a)+ABS(4.5-b)+1):NEXT:NEXT 6 FORa=0TO7:FORb=0TO7:bb(a,b)=1/(a+b+5):NEXT:NEXT 20 a=0:b=0:x=0:y=0:s=0:a0=0:t=0:a8=0:a1=0:a2=0:a3=0:a4=0:b1=0:b6=0:h=0:m=0:n=0 21 p=0:w=0:a5=0:i=1:DIMc(64):ys$="{home}{down*24}" 22 b$="{reverse off}":w$="{reverse on}":sq$="{sh space*3}{down}{left*3}{sh space*3}{down}{left*3}{sh space*3}" 23 wn$=w$+sq$:up$="{up*2}":wh$=wn$+up$ 24 bn$=b$+sq$:bl$=bn$+up$ 25 l2$=wh$+bl$+wh$+bl$+wh$+bl$+wh$+bn$ 26 l1$=bl$+wh$+bl$+wh$+bl$+wh$+bl$+wn$ 30 PRINT"{clear}{white}{down*10}{right*6}do you want instructions?" 31 GETin$:IFin$=""THEN31 32 IFin$="y"THENGOSUB2220:GOTO40 33 IFin$<>"n"THEN31 40 SYS49152 50 INPUT"{clear}{down*10}{right*4}your name is ";b$:IFb$=""THENb$="human " 51 b$=LEFT$(b$,7) 60 INPUT"{clear}{down*10}{right*4}level of play ";b8:GOSUB65:GOTO70 65 b7=(b8+1)/2+RND(0)/2 66 IFb8=0THENb8=1:b7=1+RND(0)/2 67 RETURN 70 PRINT"{clear}{down*10}{right*4}do you want white "b$" ";:INPUTc$:GOSUB1050:GOSUB790 71 IFLEFT$(c$,1)<>"n"THENGOSUB900:GOTO190 80 GOSUB890: REM start time 100 SYS49152+215 101 f=-99:a0=0:FORj=1TO8:FORk=1TO8:IFa(j,k)=99THENa6=j:a7=k 110 NEXT:NEXT:GOSUB1830:SYS49152+182 120 x=1 121 y=1 122 IFa(x,y)<0THENGOSUB270:IFf>=b7THEN150 123 y=y+1:IFy<9THEN122 124 x=x+1:IFx<9THEN121 130 IFf>=-9THEN150 131 GOSUB900 140 ln=7:GOSUB3000:PRINT"i concede{space*3}";:GOTO2190 141 GOSUB1830:b7=3*RND(0):ln=13:GOSUB3000:PRINT"self-playing"; 142 FORz=0TO500:NEXTz:GOSUB2480:GOTO100 149 REM********************************* 150 a(r,u)=a(e,q):a(e,q)=1 160 ln=5:GOSUB3000:PRINTCHR$(e+64);q;"- ";CHR$(r+64);u; 161 ln=7:GOSUB3000:PRINT"is my move{space*2}"; 170 REM stop time 180 GOSUB4010:IFa(r,u)=-2ANDu=1THENa(r,u)=-9:GOSUB910 181 x=r:y=u:a0=4:GOSUB270 182 IFc=1THENln=7:GOSUB3000:PRINT"check "b$;:c=0 190 IFx$="s"THEN141 191 SYS49152+204:SYS49152+193 192 ln=17:GOSUB3000:PRINT"move "b$;:GOTO1590 193 d=0:b4=a:b9=b:b5=0 194 IFa(x,y)=2ANDy=5ANDb=6ANDa(a,b)=1ANDABS(a-x)=1THENb5=1:GOTO220 200 IFx$="k"ORx$="q"THEN100 210 IFx$="s"THEN141 211 a0=3:GOSUB250 212 IFd=0THENln=21:GOSUB3000:PRINT"illegal{space*5}";:GOTO190 220 ln=21:GOSUB3000:PRINT"ok{space*10}";:a=b4:b=b9:a(a,b)=a(x,y):a(x,y)=1 221 GOSUB4020:IFn$="n"THENGOSUB2032:n$=" " 230 IFa(a,b)=2ANDb=8THENGOSUB2100 240 IFb5=1THENa(a,b-1)=1:x=a:y=b-1:GOSUB910 241 GOTO100 249 REM********************************* 250 REM ln=13:gosub3000:print"thinking{space*3}"; 251 ONa(x,y)GOTO0,480,0,380,330,0,280,0,330:GOTO460 269 REM********************************* 270 ON-a(x,y)GOTO0,530,0,380,330,0,280,0,330:GOTO460 279 REM********************************* 280 b=y:a=x+1:IFa=9THEN290 281 GOSUB640:IFs=0THENa=a+1:IFa<9THEN281 290 a=x-1:IFa=0THEN300 291 GOSUB640:IFs=0THENa=a-1:IFa>0THEN291 300 a=x:b=y+1:IFb=9THEN310 301 GOSUB640:IFs=0THENb=b+1:IFb<9THEN301 310 b=y-1:IFb=0THENRETURN 311 GOSUB640:IFs=0THENb=b-1:IFb>0THEN311 312 RETURN 329 REM********************************* 330 b=y+1:a=x+1:IFb=9ORa=9THEN340 331 GOSUB640:IFs=0THENa=a+1:b=b+1:IFa<9ANDb<9THEN331 340 b=y-1:a=x-1:IFb=0ORa=0THEN350 341 GOSUB640:IFs=0THENa=a-1:b=b-1:IFa>0ANDb>0THEN341 350 b=y+1:a=x-1:IFb=9ORa=0THEN360 351 GOSUB640:IFs=0THENa=a-1:b=b+1:IFa>0ANDb<9THEN351 360 b=y-1:a=x+1:IFb=0ORa=9THEN370 361 GOSUB640:IFs=0THENa=a+1:b=b-1:IFa<9ANDb>0THEN361 370 IFABS(a(x,y))=9THEN280 371 RETURN 379 REM********************************* 380 a=x+2:b=y+1:IFa<9ANDb<9THENGOSUB650 390 b=b-2:IFb>0ANDa<9THENGOSUB650 400 a=a-4:IFa>0ANDb>0THENGOSUB650 410 b=b+2:IFb<9ANDa>0THENGOSUB650 420 a=a+1:b=b+1:IFa>0ANDb<9THENGOSUB650 430 b=b-4:IFb>0ANDa>0THENGOSUB650 440 a=a+2:IFa<9ANDb>0THENGOSUB650 450 b=b+4:IFb<9ANDa<9THENGOSUB650 451 RETURN 459 REM********************************* 460 a=x-1:IFa=0THENa=1 461 b=y-1:IFb=0THENb=1 462 IFa(a,b)<>0THENGOSUB650 470 b=b+1:IFb2THEN500 490 b=y+1:IFa(a,b)=1THENGOSUB660:b=b+1:IFa(a,b)=1THENGOSUB660 491 GOTO510 500 b=y+1:IFa(a,b)=1THENGOSUB660 510 a=x+1:IFa=9THENa=7:GOTO521 511 b=y+1:IFa(a,b)<0THENGOSUB660 520 a=x-1:IFa=0THENRETURN 521 IFa(a,b)<0THENGOSUB660 522 RETURN 529 REM********************************* 530 a=x:IFy<7THEN550 540 b=y-1:IFa(a,b)=1THENGOSUB660:b=b-1:IFa(a,b)=1THENGOSUB660 541 GOTO560 550 b=y-1:IFa(a,b)=1THENGOSUB660 560 a=x-1:IFa=0THENa=2:GOTO571 561 b=y-1:IFa(a,b)>1THENGOSUB660 570 a=x+1:IFa=9THENRETURN 571 IFa(a,b)>1THENGOSUB660 572 RETURN 579 REM********************************* 580 t=a(a,b):IFt=-99THENb1=t:RETURN 590 a5=s:IFABS(t)<=a(x,y)THENa(a,b)=a(x,y):a(x,y)=1:GOTO610 600 IFt1THENGOSUB250 740 y=y+1:IFy<9THEN732 741 x=x+1:IFx<9THEN731 742 x=n:y=h:a0=1:GOSUB270:a0=0:s=b3:x=w:y=m:a=n:b=h:a(x,y)=a(a,b):a(a,b)=p 750 b6=ab(a,b) 751 IFa(x,y)<-2ANDa(x,y)>-9THENb6=b6+bb(ABS(a6-a),ABS(a7-b))+RND(0)/15 760 g=p+b1+b6:IFp=99THENGOSUB900:ln=17:GOSUB3000:PRINT"mate "b$;:GOTO2190 770 IFg<=fTHENRETURN 780 f=g:e=x:q=y:r=a:u=b:RETURN 789 REM********************************* 790 DATA-7,-4,-5,-9,-99,-5,-4,-7 800 DATA-2,-2,-2,-2,-2,-2,-2,-2 810 DATA1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 820 DATA2,2,2,2,2,2,2,2 830 DATA7,4,5,9,99,5,4,7 840 FORy=8TO1STEP-1:FORx=1TO7STEP2:s(x,y)=i:s(x+1,y)=-i:NEXT:i=-i:NEXT 850 FORy=8TO1STEP-1:FORx=1TO8:READa(x,y):NEXT:NEXT:RETURN 889 REM********************************* 890 i=-i:a(4,1)=99:a(5,1)=9:a(4,8)=-99:a(5,8)=-9 900 FORy=1TO8:FORx=1TO8:GOSUB910:NEXT:NEXT:RETURN 910 ci=192:IFs(x,y)>0THENci=64:REM set background colour 920 pp=120*(8-y)+(x-1)*3: REM get poke position 930 pc=1:IFi*a(x,y)<0THENpc=0: REM set piece colour 931 IFa(x,y)=1THEN950 940 FORcp=cm+ppTOcm+pp+2:POKEcp,pc:POKEcp+40,pc:POKEcp+80,pc:NEXT:REM poke colr 950 vp=vd+pp:ONABS(a(x,y))GOSUB980,990,0,1000,1010,0,1020,0,1030 960 IFABS(a(x,y))=99THENGOSUB1040 970 RETURN 980 IFPEEK(vp+41)=32+ciTHENRETURN 981 POKEvp,32+ci:POKEvp+1,32+ci:POKEvp+2,32+ci:vp=vp+40 982 POKEvp,32+ci:POKEvp+1,32+ci:POKEvp+2,32+ci:vp=vp+40 983 POKEvp,32+ci:POKEvp+1,32+ci:POKEvp+2,32+ci:RETURN 990 POKEvp,32+ci:POKEvp+1,32+ci:POKEvp+2,32+ci:vp=vp+40 991 POKEvp,32+ci:POKEvp+1,42+ci:POKEvp+2,32+ci:vp=vp+40 992 POKEvp,32+ci:POKEvp+1,36+ci:POKEvp+2,32+ci:RETURN 1000 POKEvp,32+ci:POKEvp+1,59+ci:POKEvp+2,32+ci:vp=vp+40 1001 POKEvp,32+ci:POKEvp+1,40+ci:POKEvp+2,32+ci:vp=vp+40 1002 POKEvp,0+ci:POKEvp+1,34+ci:POKEvp+2,27+ci:RETURN 1010 POKEvp,32+ci:POKEvp+1,58+ci:POKEvp+2,32+ci:vp=vp+40 1011 POKEvp,32+ci:POKEvp+1,39+ci:POKEvp+2,32+ci:vp=vp+40 1012 POKEvp,0+ci:POKEvp+1,33+ci:POKEvp+2,27+ci:RETURN 1020 POKEvp,60+ci:POKEvp+1,61+ci:POKEvp+2,62+ci:vp=vp+40 1021 POKEvp,43+ci:POKEvp+1,41+ci:POKEvp+2,44+ci:vp=vp+40 1022 POKEvp,28+ci:POKEvp+1,35+ci:POKEvp+2,29+ci:RETURN 1030 POKEvp,32+ci:POKEvp+1,47+ci:POKEvp+2,32+ci:vp=vp+40 1031 POKEvp,32+ci:POKEvp+1,38+ci:POKEvp+2,32+ci:vp=vp+40 1032 POKEvp,30+ci:POKEvp+1,33+ci:POKEvp+2,31+ci:RETURN 1040 POKEvp,32+ci:POKEvp+1,46+ci:POKEvp+2,32+ci:vp=vp+40 1041 POKEvp,32+ci:POKEvp+1,37+ci:POKEvp+2,32+ci:vp=vp+40 1042 POKEvp,30+ci:POKEvp+1,33+ci:POKEvp+2,31+ci:RETURN 1050 POKEv+17,PEEK(v+17)AND239 1051 PRINT"{clear}";:FORz=1TO4:PRINTl1$:PRINTl2$:NEXT:PRINT"{home}{white}"; 1052 POKEv+17,PEEK(v+17)OR16 1053 POKE251,14:POKE252,14:POKE253,1:RETURN 1500 IFa(6,1)=1ANDa(7,1)=1THEN1502 1501 GOTO1540 1502 a(5,1)=1:a(8,1)=1:a(7,1)=99:a(6,1)=7:d=1 1503 x3=5:x4=7:x5=8:x6=6:GOTO1550 1510 IFa(4,1)=1ANDa(3,1)=1ANDa(2,1)=1THEN1512 1511 GOTO1540 1512 a(5,1)=1:a(1,1)=1:a(3,1)=99:a(4,1)=7:d=1 1513 x3=5:x4=3:x5=1:x6=4:GOTO1550 1520 IFa(3,1)=1ANDa(2,1)=1THEN1522 1521 GOTO1540 1522 a(4,1)=1:a(1,1)=1:a(2,1)=99:a(3,1)=7:d=1 1523 x3=4:x4=2:x5=1:x6=3:GOTO1550 1530 IFa(5,1)=1ANDa(6,1)=1ANDa(7,1)=1THEN1532 1531 GOTO1540 1532 a(4,1)=1:a(8,1)=1:a(6,1)=99:a(5,1)=7:d=1 1533 x3=4:x4=6:x5=8:x6=5:GOTO1550 1540 d=0 1550 ln=19:GOSUB3000:PRINT"cstl "x$"-side "; 1552 IFd=0THENln=21:GOSUB3000:PRINT"illegal{space*5}";:GOTO1590 1553 IFd=1THENln=21:GOSUB3000:PRINT"ok{space*10}"; 1560 x=x3:y=1:a=x4:b=1:GOSUB4020 1570 x=x5:y=1:a=x6:b=1:GOSUB4020 1580 GOTO1810 1590 ln=19:GOSUB3000:PRINT"{space*12}"; 1600 GETx$:IFx$=""THEN1600 1601 ln=21:GOSUB3000:PRINT"{space*12}"; 1602 IFx$="n"THENn$=x$ 1610 IFx$>="a"ANDx$<="h"THENx=VAL(CHR$(ASC(x$)-16)):GOTO1730 1620 IFx$="n"THENGOSUB2030 1630 IFx$="k"ANDa(5,1)=99ANDa(8,1)=7THEN1500 1640 IFx$="q"ANDa(5,1)=99ANDa(1,1)=7THEN1510 1650 IFx$="k"ANDa(4,1)=99ANDa(1,1)=7THEN1520 1660 IFx$="q"ANDa(4,1)=99ANDa(8,1)=7THEN1530 1670 IFx$="x"THENSYS49152+215:GOSUB1830:GOSUB2480:GOTO100 1680 IFx$="s"THENSYS49152+215:GOTO193 1690 IFx$="m"THENSYS49152+215:GOTO1840 1700 IFx$="i"THENSYS49152+215:GOSUB2220:GOSUB1050:GOSUB900:GOSUB2091:SYS49367 1710 IFx$="l"THENSYS49152+215:GOSUB2040:SYS49152+193 1720 GOTO1600 1729 REM******************************** 1730 ln=19:GOSUB3000:PRINTx$; 1740 GETa$:y=VAL(a$):IFy=0THEN1740 1750 PRINT" "a$" - "; 1760 IFa(x,y)<2ORa(x,y)>99THENln=21:GOSUB3000:PRINT"entry error ";:GOTO1590 1770 GETa$:IFa$<"a"ORa$>"h"THEN1770 1771 a=VAL(CHR$(ASC(a$)-16)) 1780 PRINTa$" "; 1790 GETa$:b=VAL(a$):IFb=0THEN1790 1791 PRINTa$ 1810 REM start time 1820 GOTO193 1829 REM******************************** 1830 FORln=1TO24:GOSUB3000:PRINT"{space*12}";:NEXT:RETURN 1839 REM******************************** 1840 GOSUB1830:ln=13:GOSUB3000:PRINT"modifying{space*3}"; 1845 ln=19:GOSUB3000:PRINT"{space*12}";:GOTO2010 1850 IFm$<"a"ORm$>"h"THEN2010 1860 x=VAL(CHR$(ASC(m$)-16)):ln=19:GOSUB3000:PRINTm$; 1870 GETm$:IFm$<"1"ORm$>"8"THEN1870 1880 y=VAL(m$):PRINT" "m$" - "; 1890 GETm$:IFm$="c"ORm$="p"ORm$="e"THENs1$=m$:PRINTm$" ";:GOTO1900 1891 GOTO1890 1900 GETm$ 1901 IFm$="s"ORm$="p"ORm$="n"ORm$="b"ORm$="r"ORm$="q"ORm$="k"THENv$=m$:GOTO1910 1902 GOTO1900 1910 PRINTm$;:IFv$="p"THENv1=2 1920 IFv$="n"THENv1=4 1930 IFv$="b"THENv1=5 1940 IFv$="r"THENv1=7 1950 IFv$="q"THENv1=9 1960 IFv$="k"THENv1=99 1970 IFv$="s"THENv1=1 1980 IFs1$="c"ANDv1<>1THENv1=-v1 1990 a(x,y)=v1:IFs1$="e"THENa(x,y)=1 2000 GOSUB910:GOTO1845 2010 GETm$:IFm$="n"THENGOSUB2030:GOTO2010 2011 IFm$<>"z"THEN1850 2012 GOSUB1830 2020 REM start time 2021 GOTO100 2029 REM******************************** 2030 PRINTys$" a{space*2}b{space*2}c{space*2}d{space*2}e{space*2}f{space*2}g{space*2}h {up*2}1{left}{up*3}2{left}{up*3}3{left}{up*3}4{left}{up*3}5{left}{up*3}6{left}{up*3}7{left}{up*3}8"; 2031 RETURN 2032 PRINTys$"{space*24}{up*2} {left}{up*3} {left}{up*3} {left}{up*3} {left}{up*3} {left}{up*3} {left}{up*3} {left}{up*3} "; 2033 RETURN 2039 REM******************************** 2040 GOSUB1830:ln=13:GOSUB3000:PRINT"level-"b8"{space*2}";:ln=17:GOSUB3000 2041 PRINT"change level"; 2050 GETc$:IFc$="n"THEN2090 2051 IFc$<>"y"THEN2050 2052 ln=13:GOSUB3000:PRINT"{right*6}{space*6}"; 2060 GETl1$:IFl1$=""THEN2060 2061 IFl1$<"0"ORl1$>"9"THEN2060 2062 ln=13:GOSUB3000:PRINT"{right*7}"l1$; 2070 GETl2$:IFl2$=""THEN2070 2071 IFl2$<"0"ORl2$>"9"THENl2$=l1$:l1$="0" 2080 b8=VAL(l1$)*10+VAL(l2$):GOSUB65:ln=13:GOSUB3000:PRINT"{right*7}";l1$;l2$; 2090 GOSUB1830 2091 ln=17:GOSUB3000:PRINT"move "b$;:RETURN 2099 REM******************************** 2100 GOSUB1830:ln=13:GOSUB3000:PRINT"promote pawn"; 2101 ln=17:GOSUB3000:PRINT"what piece{space*2}"; 2110 ln=19:GOSUB3000:PRINT"p n b r q{space*2}"; 2115 GETz$:IFz$=""THEN2115 2120 IFz$="p"THENa(a,b)=2:GOTO2180 2130 IFz$="n"THENa(a,b)=4:GOTO2180 2140 IFz$="b"THENa(a,b)=5:GOTO2180 2150 IFz$="r"THENa(a,b)=7:GOTO2180 2160 IFz$="q"THENa(a,b)=9:GOTO2180 2170 GOTO2115 2180 x=a:y=b:GOSUB910:RETURN 2189 REM******************************** 2190 REM stop time 2200 ln=13:GOSUB3000:PRINT"-p- to play "; 2210 GETa$:IFa$=""THEN2210 2211 IFa$="p"THENRUN 2212 PRINT"{clear}";:END 2219 REM******************************** 2220 POKE648,32:POKE53272,133:PRINT"{clear}{right*11}instructions" 2230 PRINT"{down}1{space*2}special commands during player move" 2240 PRINT"{down}{space*3}type -n- to number the board" 2250 PRINT"{down}{space*8}-k- to castle king side" 2260 PRINT"{down}{space*8}-q- to castle queen side" 2270 PRINT"{down}{space*8}-x- to exchange sides" 2280 PRINT"{down}{space*8}-s- to enter self-playing mode" 2290 PRINT"{down}{space*8}-m- to modify board" 2300 PRINT"{down}{space*8}-z- to escape modify and let" 2310 PRINT"{space*12}computer move" 2320 PRINT"{down}{space*8}-i- to get instructions again" 2330 PRINT"{down}{space*8}-l- to look at and" 2340 PRINT"{space*12}change level" 2350 PRINT"{down}hit -space bar- to continue"; 2360 GETin$:IFin$<>" "THEN2360 2370 PRINT"{clear}{down}2{space*2}to promote pawn enter appropriate" 2371 PRINT"{space*3}letter when prompted" 2372 PRINT"{down}3{space*2}to capture en passant specify" 2373 PRINT"{space*3}the -from- and -to- squares" 2374 PRINT"{down}4{space*2}levels of play are from 01 to 99" 2375 PRINT"{down}5{space*2}computer assumes mate if" 2376 PRINT"{space*3}the king is left in check" 2377 PRINT"{down}6{space*2}if a move is illegal or an" 2378 PRINT"{space*3}entry error is made simply" 2379 PRINT"{space*3}type in the new move" 2380 PRINT"{space*3}a move may be started over" 2381 PRINT"{space*3}by forcing an error -eg 9" 2382 PRINT"{down}7{space*2}you have the choice of white" 2383 PRINT"{space*3}or black - the computer will" 2384 PRINT"{space*3}always be at the top of screen" 2385 PRINT"{down*3}hit -space bar- to continue"; 2386 GETin$:IFin$<>" "THEN2386 2387 PRINT"{clear}{down}8{space*2}to modify the board use the -m-" 2388 PRINT"{space*3}command" 2389 PRINT"{down}{space*3}enter the square followed by" 2390 PRINT"{down}{space*3}{black}{reverse on}c{reverse off}{white} {black}{reverse on}p{reverse off}{white} or {black}{reverse on}e{reverse off}{white}" 2391 PRINT"{down}{space*3}for computer player or empty and" 2392 PRINT"{down}{space*3}{black}{reverse on}s{reverse off}{white} {black}{reverse on}p{reverse off}{white} {black}{reverse on}n{reverse off}{white} {black}{reverse on}b{reverse off}{white} {black}{reverse on}r{reverse off}{white} {black}{reverse on}q{reverse off}{white} {black}{reverse on}k{reverse off}{white}" 2393 PRINT"{down}{space*3}for square pawn etc" 2394 PRINT"{down*11}hit -space bar- to continue game"; 2395 GETin$:IFin$<>" "THEN2395 2396 POKE648,4:POKE53272,19:RETURN 2480 GOSUB1050:ln=13:GOSUB3000:PRINT"exchanging{space*2}";:i=-i:GOSUB2490:GOSUB900 2481 RETURN 2490 l=0:FORj=1TO8:FORk=1TO8:l=l+1:IFa(j,k)<>1THENc(l)=-a(j,k):GOTO2500 2491 c(l)=a(j,k) 2500 NEXT:NEXT 2510 l=65:FORj=1TO8:FORk=1TO8:l=l-1:a(j,k)=c(l):NEXT:NEXT 2520 RETURN 2999 REM******************************** 3000 PRINTLEFT$(ys$,ln+1); 3001 PRINT"{right*27}";:RETURN 3999 REM******************************** 4000 REM get sprite char and colour 4010 sn=a(r,u):x1=FNpx(e):y1=FNpy(q):x2=FNpx(r):y2=FNpy(u) 4011 xs=e:ys=q:xe=r:ye=u:GOTO4030 4020 sn=a(a,b):x1=FNpx(x):y1=FNpy(y):x2=FNpx(a):y2=FNpy(b) 4021 xs=x:ys=y:xe=a:ye=b 4030 sc=1:IFi*sn<0THENsc=0 4040 POKEv+39,sc 4050 POKEv,x1:POKEv+1,y1 4060 ONABS(sn)GOTO0,4070,0,4071,4072,0,4073,0,4074:GOTO4075: REM select sprite 4070 sn=45:GOTO4080 4071 sn=43:GOTO4080 4072 sn=42:GOTO4080 4073 sn=44:GOTO4080 4074 sn=41:GOTO4080 4075 sn=40:GOTO4080 4080 POKE2040,sn: REM pt to sprite 4090 POKEv+21,1: REM turn on 4100 x=xs:y=ys:GOSUB910 4120 xd=SGN(x2-x1):xp=x1 4130 yd=SGN(y2-y1):yp=y1 4140 IFxp=x2ANDyp=y2THEN4200 4150 IFxp<>x2THENxp=xp+xd 4160 IFyp<>y2THENyp=yp+yd 4170 POKEv,xp:POKEv+1,yp: REM move 4180 GOTO4140 4200 x=xe:y=ye:GOSUB910 4210 POKEv+21,0: REM turn off 4220 RETURN 5999 END stop tok128 (bastext 1.0)