DIM MAP(19,19) FOR Y=0 TO 19 FOR X=0 TO 19 READ MAP(X,Y) NEXT X NEXT Y DIM DARK(15) FOR I=0 TO 15 READ DARK(I) NEXT I GAMEPAD 1 MOVSPEED=0.25 ROTSPEED=PI*0.05 PADDING=0.3 POSX=10 POSY=11 DIRX=0 DIRY=-1 CPLX=0.66 CPLY=0 DO IF UP(0) THEN MS=MOVSPEED GOSUB PLMOVE END IF IF DOWN(0) THEN MS=-MOVSPEED GOSUB PLMOVE END IF IF LEFT(0) THEN RS=-ROTSPEED GOSUB PLROTATE END IF IF RIGHT(0) THEN RS=ROTSPEED GOSUB PLROTATE END IF ATTR (1,,,,) REM COLOR 11 FOR IX=0 TO 19 FOR IY=0 TO 19 CELL IX,IY,1 NEXT IY NEXT IX REM COLOR 6 FOR IY=0 TO 9 FOR IX=0 TO 19 CELL IX,IY,2 NEXT IX NEXT IY ATTR (0,,,,) FOR X=0 TO 19 CAMX=2*X/19-1 RAYPX=POSX RAYPY=POSY RAYDX=DIRX+CPLX*CAMX RAYDY=DIRY+CPLY*CAMX MAPX=INT(RAYPX) MAPY=INT(RAYPY) IF RAYDX<>0 THEN DDISX=SQR(1+(RAYDY*RAYDY)/(RAYDX*RAYDX)) ELSE DDISX=1000 END IF IF RAYDY<>0 THEN DDISY=SQR(1+(RAYDX*RAYDX)/(RAYDY*RAYDY)) ELSE DDISY=1000 END IF IF RAYDX<0 THEN STEPX=-1 SDISX=(RAYPX-MAPX)*DDISX ELSE STEPX=1 SDISX=(MAPX+1-RAYPX)*DDISX END IF IF RAYDY<0 THEN STEPY=-1 SDISY=(RAYPY-MAPY)*DDISY ELSE STEPY=1 SDISY=(MAPY+1-RAYPY)*DDISY END IF REPEAT IF SDISX0 WDIS=1 IF SIDE=0 THEN IF RAYDX<>0 THEN WDIS=ABS((MAPX-RAYPX+(1-STEPX)/2)/RAYDX) ELSE IF RAYDY<>0 THEN WDIS=ABS((MAPY-RAYPY+(1-STEPY)/2)/RAYDY) END IF IF WDIS<0.1 THEN WDIS=0.1 LH=ABS(20/WDIS) WCOL=MAP(MAPX,MAPY) ATTR(INT(WCOL/2),,,,) IF SIDE=1 THEN WCOL=DARK(WCOL) REM COLOR WCOL FOR IY=9-LH/2 TO 9+LH/2 IF IY>=0 AND IY<=19 AND X>=0 AND X<=19 THEN CELL X,IY,2 NEXT IY ATTR(1,,,,) REM LINE X,9-LH/2 TO X,9+LH/2 REM COLOR DARK(WCOL) IF X MOD 2=0 THEN IY=9+LH/8 IF IY>=0 AND IY<=18 THEN CELL X,9+LH/8,3 ELSE IY=9-LH/16 IF IY>=0 AND IY<=19 THEN CELL X,9-LH/16,3 END IF IY=9-LH/2 IF IY>=0 AND IY<=19 THEN CELL X,9-LH/2,3 IY=9+LH/2 IF IY>=0 AND IY<=19 THEN CELL X,9+LH/2,3 NEXT X WAIT 4 'CLS LOOP PLMOVE: MOVDX=DIRX*MS MOVDY=DIRY*MS NPOSX=POSX+MOVDX NPOSY=POSY+MOVDY PADX=0 PADY=0 IF MOVDX<0 THEN PADX=-PADDING IF MOVDX>0 THEN PADX=PADDING IF MOVDY<0 THEN PADY=-PADDING IF MOVDY>0 THEN PADY=PADDING PAD2=PADDING+0.01 IF MAP(INT(NPOSX+PADX),INT(NPOSY+PADY))>0 THEN IF MOVDX<0 THEN NPOSX2=INT(POSX)+PAD2 ELSE NPOSX2=INT(POSX+1)-PAD2 END IF IF MOVDY<0 THEN NPOSY2=INT(POSY)+PAD2 ELSE NPOSY2=INT(POSY+1)-PAD2 END IF IF MAP(INT(POSX+PADX),INT(NPOSY+PADY))=0 THEN NPOSX=NPOSX2 ELSE IF MAP(INT(NPOSX+PADX),INT(POSY+PADY))=0 THEN NPOSY=NPOSY2 ELSE NPOSX=NPOSX2 NPOSY=NPOSY2 END IF END IF POSX=NPOSX POSY=NPOSY RETURN PLROTATE: OLDDIRX=DIRX DIRX=DIRX*COS(RS)-DIRY*SIN(RS) DIRY=OLDDIRX*SIN(RS)+DIRY*COS(RS) OLDCPLX=CPLX CPLX=CPLX*COS(RS)-CPLY*SIN(RS) CPLY=OLDCPLX*SIN(RS)+CPLY*COS(RS) RETURN REM MAP DATA 2,2,2,2,2,9,9,9,9,9 DATA 9,9,9,9,2,11,11,11,11,11 DATA 2,0,0,0,0,9,0,0,0,0 DATA 0,0,0,0,2,11,0,0,0,11 DATA 2,0,14,0,0,9,0,8,8,8 DATA 8,8,8,0,2,11,0,0,0,11 DATA 2,0,0,0,0,9,0,0,0,0 DATA 0,0,8,0,2,11,0,0,0,11 DATA 2,0,0,0,0,9,0,0,0,0 DATA 0,0,8,0,2,11,11,11,0,11 DATA 9,9,9,9,0,9,9,9,9,9 DATA 9,9,9,0,2,2,2,2,0,11 DATA 9,0,0,0,0,9,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,9 DATA 9,9,0,9,9,9,0,2,0,9 DATA 9,9,9,0,6,0,9,0,0,9 DATA 9,0,0,9,0,9,0,2,0,0 DATA 0,0,9,0,6,0,9,0,0,9 DATA 9,0,0,9,0,0,0,2,0,0 DATA 0,0,9,0,6,0,9,9,9,9 DATA 9,0,0,9,0,6,0,2,0,0 DATA 0,0,9,0,6,0,9,0,0,9 DATA 9,0,0,9,0,6,0,2,0,0 DATA 0,0,9,0,6,0,9,0,0,9 DATA 9,0,9,9,0,6,0,2,2,2 DATA 2,0,9,0,6,0,9,0,0,9 DATA 9,0,0,0,0,6,0,0,0,0 DATA 0,0,0,0,6,0,0,0,0,9 DATA 9,0,9,9,9,9,9,9,9,0 DATA 9,9,9,9,9,9,9,9,9,9 DATA 2,0,0,0,0,9,0,0,0,0 DATA 9,0,0,0,0,0,0,0,0,1 DATA 2,0,0,4,0,9,0,9,9,9 DATA 9,9,9,0,4,0,0,0,0,1 DATA 2,0,0,0,0,9,0,9,0,0 DATA 0,0,0,0,4,0,0,12,0,1 DATA 2,0,0,0,0,9,0,0,0,0 DATA 0,0,0,0,4,0,0,0,0,1 DATA 2,2,2,2,2,4,4,4,4,4 DATA 4,4,4,4,4,1,1,1,1,1 REM DARK COLORS DATA 0,2,3,0,5,0,5,6,7,10,0,12,13,0,15,5 #1:MAIN PALETTES 003F2F0000341B00003C0C00003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 FFFFFFFFFFFFFFFF0000000000000000 0000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF