RANDOMIZE TIMER DIM GLOBAL LITES(39,31,1),RADS(19,15) GLOBAL EVENOFF,EVENON,ODDOFF,ODDON,CURP EVENOFF=64 EVENON=67 ODDOFF=80 ODDON=83 ON RASTER CALL RAST TOUCHSCREEN CURP=0 LASTX=-1 LASTY=-1 VIRG=-1 LASTTIME=0 ADDR=$A000 DO FOR Y=0 TO 31 FOR X=0 TO 39 CX=X\2 ODD=X MOD 2 R=LITES(X,Y,0) BG ODD CL=CELL.C(CX,Y) CP=CELL.A(CX,Y) AND 7 IF CL=0 THEN IF ODD THEN CL=ODDOFF ELSE CL=EVENOFF END IF END IF IF ODD THEN OFFS=CL-ODDOFF CB=ODDOFF ELSE OFFS=CL-EVENOFF CB=EVENOFF END IF IF R=0 THEN IF OFFS>0 THEN DEC OFFS PAL CP CELL CX,Y,CB+OFFS END IF ELSE IF R=1 THEN IF OFFS<3 THEN INC OFFS PAL CP CELL CX,Y,CB+OFFS END IF ELSE IF OFFS=0 THEN IF LITES(X,Y,1)<0 THEN INC LITES(X,Y,1) ELSE LITES(X,Y,1)=R INC OFFS END IF ELSE IF OFFS=3 THEN IF LITES(X,Y,1)>0 THEN DEC LITES(X,Y,1) ELSE LITES(X,Y,1)=-R DEC OFFS END IF ELSE ADD OFFS,SGN(LITES(X,Y,1)) END IF PAL CP CELL CX,Y,CB+OFFS END IF NEXT X NEXT Y IF TOUCH THEN TX=TOUCH.X\4 TY=TOUCH.Y\4 IF VIRG THEN RANDOMIZE TIMER CURP=RND(7) VIRG=0 LASTTIME=TIMER ADDR=$A000 END IF CALL CONNECT(LASTX,LASTY,TX,TY,ADDR,CURP) LASTX=TX LASTY=TY ELSE IF NOT VIRG THEN VIRG=-1 IF ADDR>$A000 THEN T=(RND(3)+1) FOR I=(ADDR-2) TO $A000 STEP -2 PX=PEEK(I) PY=PEEK(I+1) LITES(PX,PY,0)=T LITES(PX,PY,1)=0 NEXT I END IF END IF LASTX=-1 LASTY=-1 END IF IF RND(2)=0 THEN 'T=RND(30) U=RND(7) T=(U+1)\2 BDDR=$B000 TLX=RND(19) TLY=RND(15) LLX=RND(19) LLY=RND(15) SIDES=RND(3) FOR S=0 TO SIDES-1 CALL CONNECT(19-LLX,15-LLY,19-TLX,15-TLY,BDDR,U) CALL CONNECT(19-LLX,15+LLY,19-TLX,15+TLY,BDDR,U) CALL CONNECT(19+LLX,15-LLY,19+TLX,15-TLY,BDDR,U) CALL CONNECT(19+LLX,15+LLY,19+TLX,15+TLY,BDDR,U) LLX=TLX LLY=TLY TLX=RND(19) TLY=RND(15) NEXT S IF BDDR>$B000 THEN FOR I=(BDDR-2) TO $B000 STEP -2 PX=PEEK(I) PY=PEEK(I+1) LITES(PX,PY,0)=T LITES(PX,PY,1)=0 NEXT I END IF END IF 'WAIT VBL LOOP SUB RAST IF RASTER MOD 4=0 THEN V=RASTER SCROLL 0,0,V SCROLL 1,0,V END IF END SUB SUB KALIDE(R,D,M,T,CRP) F=2*PI/M G=D/(SQR(2)*20) FOR I=0 TO M-1 X=COS((F*I)+R)*G Y=SIN((F*I)+R)*G ODD=(INT(20+X) MOD 2) IF ODD THEN CR=ODDOFF ELSE CR=EVENOFF CELL 20+X,16+Y,CR LITES(20+X,16+Y,0)=T NEXT I END SUB SUB INITRADS FOR Y=0 TO 15 FOR X=0 TO 19 D=SQR(X*X+Y*Y) IF X=0 THEN RADS(X,Y)=0 ELSE IF Y=0 THEN RADS(X,Y)=PI/2 ELSE RADS(X,Y)=ATAN(Y/X) END IF NEXT X NEXT Y END SUB SUB CONNECT(LASTX,LASTY,TX,TY,ADDR,CRP) IF LASTX<0 THEN CT=1 FX=TX FY=TY HY=0 HX=0 ELSE DX=TX-LASTX DY=TY-LASTY IF DX=0 AND DY=0 THEN EXIT SUB IF DX=0 THEN IF DY=0 THEN CT=0 HX=0 HY=0 ELSE CT=ABS(DY) HX=0 HY=SGN(DY) END IF ELSE IF DY=0 THEN CT=ABS(DX) HX=SGN(DX) HY=0 ELSE IF ABS(DX)>ABS(DY) THEN CT=ABS(DX) HX=SGN(DX) HY=ABS(DY/DX)*SGN(DY) ELSE CT=ABS(DY) HY=SGN(DY) HX=ABS(DX/DY)*SGN(DX) END IF FX=LASTX FY=LASTY END IF FOR I=0 TO CT-1 ADD FX,HX ADD FY,HY IF FX>=40 OR FY>=32 OR FX<0 OR FY<0 THEN ELSE LX=INT(FX) LY=INT(FY) POKE ADDR,LX POKE ADDR+1,LY ADD ADDR,2 LITES(LX,LY,0)=1 LITES(LX,LY,1)=0 BG (LX MOD 2) PAL CRP CELL LX\2,LY,EVENON+(16*(LX MOD 2)) END IF NEXT I END SUB #1:MAIN PALETTES 003E2814002F0A05003B2211000F0702 003A2010002E080400392410003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00606000000000000060600000000000 609090600000000060F0F06000000000 9060609000000000F09090F000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00060600000000000006060000000000 0609090600000000060F0F0600000000 09060609000000000F09090F00000000