5 ONERROR IF ERR=254 GOTO20 ELSE:REPORT:PRINTERL:END 10 *RAMOFF 20 REM MAGIC3D by L Knight May 1994 30 MODE4:DIMA%(60):DIMB%(60) 40 FORY%=0TO1023 STEP4 50 pD%=15:pP%=0 60 FORN%=0TO60:A%(N%)=RND(2)-1:NEXT 70 FORX%=0TO1279STEP4 80 K%=ABS(740-X%)+ABS(512-Y%):IFK%<450 D%=K%DIV30 ELSED%=15 90 L%=D%+45:pL%=pD%+45 100 IFpD%>D% PROCforward:GOTO130 110 IFpD%0 D%=15-(SIN(K%/55))*K%/70-K%/60 ELSED%=15 390 REM DISKS:- 400 REM 80 IF(540-X%)^2+(700-Y%)^2<62000 D%=10 ELSE D%=15 410 REM 81 IF(940-X%)^2+(700-Y%)^2<62000 D%=5 420 REM 82 IF(740-X%)^2+(300-Y%)^2<62000 D%=0 430 REM BALL:- 440 REM 80 K%=(740-X%)^2+(512-Y%)^2:IFK%<93000 D%=7-((SQR(93000-K%))DIV49)MOD16 ELSED%=15 450 460 REM Major variables:- 470 REM D% = current depth (0 to 15) 480 REM pD%= previous depth 490 REM L% = current loop length 500 REM pL%= previous loop length 510 REM P% = current position in loop 520 REM pP%= previous position in loop 530 540 REM Action of PROCforward:- 550 REM Line 200 transfers loop from 560 REM array A% to array B%, rotating 570 REM the loop so pointer pP% is at 580 REM bottom. 590 REM Line 210 transfers loop back, 600 REM removing the bottom I% digits. 610 620 REM Action of PROCback:- 630 REM Line 270 - as line 200. 640 REM Line 280 transfers loop back, 650 REM opening gap at bottom. 660 REM Line 290 fills the gap.