Improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 24 Feb 2025 21:42:52 +0000 (23:42 +0200)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 24 Feb 2025 21:42:52 +0000 (23:42 +0200)
Graphics/Presentations/AI/AI demo.bas

index ace5ef5..7037aa9 100644 (file)
@@ -21,7 +21,9 @@ DECLARE SUB box (x1!, y1!, x2!, y2!)
 DECLARE SUB calc (tx1!, ty1!, tz1!, tx2!, ty2!, tz2!, tx3!, ty3!, tz3!, c!)\r
 DECLARE SUB getan (x1!, y1!, x2!, y2!, N!)\r
 DECLARE SUB RotatePoint (zx!, zy!, x1!, y1!, N!)\r
-DECLARE SUB fp (x1!, y1!, x2!, y2!, x3!, y3!, c!)\r
+'--- Renamed here ---\r
+DECLARE SUB FillPolygon (xCoord1!, yCoord1!, xCoord2!, yCoord2!, xCoord3!, yCoord3!, colorVal!)\r
+'---------------------\r
 DECLARE SUB InitializeFont ()\r
 DECLARE SUB inpur ()\r
 DECLARE SUB mkback ()\r
@@ -50,30 +52,33 @@ Scene8
 Scene9\r
 \r
 SUB box (x1, y1, x2, y2)\r
+' Draws a soft-edged rectangular box\r
+' by blending pixel colors around the edges.\r
+    FOR y = y1 TO y2\r
+        s = 10\r
+        IF y - y1 <= 10 THEN\r
+            s = (SQR((20 - (y - y1)) * (y - y1)))\r
+        END IF\r
 \r
-FOR y = y1 TO y2\r
-    s = 10\r
-    IF y - y1 <= 10 THEN\r
-        s = (SQR((20 - (y - y1)) * (y - y1)))\r
-    END IF\r
-\r
-    IF y2 - y <= 10 THEN\r
-        s = (SQR((20 - (y2 - y)) * (y2 - y)))\r
-    END IF\r
-\r
-    FOR x = x1 - s TO x2 + s\r
-        c = POINT(x, y)\r
-        IF c <= 127 THEN\r
-            c = c + 127\r
-            IF c > 245 THEN c = 245\r
-            PSET (x, y), c\r
+        IF y2 - y <= 10 THEN\r
+            s = (SQR((20 - (y2 - y)) * (y2 - y)))\r
         END IF\r
-    NEXT x\r
-NEXT y\r
 \r
+        FOR x = x1 - s TO x2 + s\r
+            c = POINT(x, y)\r
+            IF c <= 127 THEN\r
+                c = c + 127\r
+                IF c > 245 THEN c = 245\r
+                PSET (x, y), c\r
+            END IF\r
+        NEXT x\r
+    NEXT y\r
 END SUB\r
 \r
 SUB calc (tx1, ty1, tz1, tx2, ty2, tz2, tx3, ty3, tz3, c)\r
+' Computes a value (c) based on\r
+' the positions of three 3D points.\r
+\r
     x1 = tx1\r
     y1 = ty1\r
     z1 = tz1\r
@@ -116,46 +121,58 @@ SUB calc (tx1, ty1, tz1, tx2, ty2, tz2, tx3, ty3, tz3, c)
     IF c < 0 THEN c = 0\r
 END SUB\r
 \r
-SUB fp (x1, y1, x2, y2, x3, y3, c)\r
-\r
-DIM yb(-100 TO 300)\r
-\r
-mx1 = x1\r
-my1 = y1\r
-mx2 = x2\r
-my2 = y2\r
-GOSUB mkl\r
-mx1 = x1\r
-my1 = y1\r
-mx2 = x3\r
-my2 = y3\r
-GOSUB mkl\r
-mx1 = x3\r
-my1 = y3\r
-mx2 = x2\r
-my2 = y2\r
-GOSUB mkl\r
-GOTO 1\r
+SUB FillPolygon (xCoord1, yCoord1, xCoord2, yCoord2, xCoord3, yCoord3, colorVal)\r
+\r
+' Fills a triangular area by connecting the edges.\r
+' It uses a scanline approach, storing intersection points in yb() array,\r
+' then drawing horizontal lines between those intersection points.\r
+\r
+    DIM yb(-100 TO 300)\r
+\r
+    ' The following variables (mx1, my1, etc.) track the endpoints of edges\r
+    mx1 = xCoord1\r
+    my1 = yCoord1\r
+    mx2 = xCoord2\r
+    my2 = yCoord2\r
+    GOSUB mkl\r
+\r
+    mx1 = xCoord1\r
+    my1 = yCoord1\r
+    mx2 = xCoord3\r
+    my2 = yCoord3\r
+    GOSUB mkl\r
+\r
+    mx1 = xCoord3\r
+    my1 = yCoord3\r
+    mx2 = xCoord2\r
+    my2 = yCoord2\r
+    GOSUB mkl\r
+\r
+    GOTO 1\r
 \r
 mkl:\r
-IF my2 < my1 THEN SWAP my1, my2: SWAP mx1, mx2\r
-FOR y = my1 TO my2 - 1\r
-    x = mx1 + (mx2 - mx1) * ((y - my1) / (my2 - my1))\r
-    IF yb(y) = 0 THEN\r
-        yb(y) = x\r
-    ELSE\r
-        LINE (x, y)-(yb(y), y), c\r
+    ' If the second point is above the first, swap them\r
+    IF my2 < my1 THEN\r
+        SWAP my1, my2\r
+        SWAP mx1, mx2\r
     END IF\r
-NEXT y\r
-RETURN\r
-\r
-1\r
 \r
-'LINE (x1, y1)-(x2, y2), 0\r
-'LINE (x3, y3)-(x2, y2), 0\r
-'LINE (x1, y1)-(x3, y3), 0\r
+    ' Scan through each row (y) in the current edge segment\r
+    FOR y = my1 TO my2 - 1\r
+        x = mx1 + (mx2 - mx1) * ((y - my1) / (my2 - my1))\r
+        IF yb(y) = 0 THEN\r
+            ' First intersection on this scanline\r
+            yb(y) = x\r
+        ELSE\r
+            ' Second intersection -> draw a horizontal line\r
+            LINE (x, y)-(yb(y), y), colorVal\r
+        END IF\r
+    NEXT y\r
+    RETURN\r
 \r
+1:\r
 END SUB\r
+'----------------------------------------------------------------------------------\r
 \r
 SUB getan (x1, y1, x2, y2, N)\r
     IF y1 = y2 THEN\r
@@ -164,14 +181,20 @@ SUB getan (x1, y1, x2, y2, N)
     END IF\r
 \r
     IF y2 > y1 THEN\r
-        IF x2 = x1 THEN N = pi: GOTO 2\r
+        IF x2 = x1 THEN\r
+            N = pi\r
+            GOTO 2\r
+        END IF\r
         IF x2 > x1 THEN\r
             N = (pi * 1) - ATN((x2 - x1) / (y2 - y1))\r
         ELSE\r
             N = pi + ATN((x1 - x2) / (y2 - y1))\r
         END IF\r
     ELSE\r
-        IF x2 = x1 THEN N = 0: GOTO 2\r
+        IF x2 = x1 THEN\r
+            N = 0\r
+            GOTO 2\r
+        END IF\r
         IF x2 > x1 THEN\r
             N = ATN((x2 - x1) / (y1 - y2))\r
         ELSE\r
@@ -179,7 +202,7 @@ SUB getan (x1, y1, x2, y2, N)
         END IF\r
     END IF\r
 \r
-2\r
+2:\r
 END SUB\r
 \r
 ' Subroutine to initialize font data\r
@@ -199,78 +222,77 @@ SUB InitializeFont
 END SUB\r
 \r
 SUB inpur\r
-a$ = INPUT$(1)\r
-\r
+    a$ = INPUT$(1)\r
 END SUB\r
 \r
 DEFINT A-Z\r
 SUB mkback\r
-CLS\r
-SetPalette 0, 5, 5, 250\r
-SetPalette 0, 5, 5, 251\r
-SetPalette 0, 5, 5, 252\r
-SetPalette 0, 5, 5, 253\r
-SetPalette 0, 5, 5, 254\r
-SetPalette 0, 5, 5, 255\r
-\r
-FOR a = 0 TO 127\r
-    OUT &H3C8, a\r
-    OUT &H3C9, SIN(a / 22) * 30 + 30\r
-    OUT &H3C9, SIN(a / 18) * 5 + 5\r
-    OUT &H3C9, COS(a / 12) * 10 + 10\r
-NEXT a\r
-\r
-FOR a = 128 TO 245\r
-    OUT &H3C8, a\r
-    b = a - 128\r
-    OUT &H3C9, SIN(b / 22) * 4 + 10\r
-    OUT &H3C9, SIN(b / 18) * 4 + 10\r
-    OUT &H3C9, COS(b / 12) * 4 + 10\r
-NEXT a\r
-\r
-DIM lm\r
-lm = 127\r
-\r
-s = 2 ^ 8\r
-5\r
-s = s \ 2\r
-x2 = (319 \ s) - 1\r
-y2 = (199 \ s) - 1\r
-\r
-FOR y = 0 TO y2\r
-    FOR x = 0 TO x2\r
-        x1 = x * s\r
-        y1 = y * s\r
-        c1 = POINT(x1, y1)\r
-        c2 = POINT(x1 + s, y1)\r
-        c3 = POINT(x1, y1 + s)\r
-        c4 = POINT(x1 + s, y1 + s)\r
-\r
-        sp = s \ 2\r
-\r
-        cc2 = ((c1 + c2) / 2) + (RND * 6) - 3\r
-        IF cc2 > lm THEN cc2 = lm\r
-\r
-        cc3 = ((c1 + c3) / 2) + (RND * 6) - 3\r
-        IF cc3 > lm THEN cc3 = lm\r
-\r
-        cc4 = ((c2 + c4) / 2) + (RND * 6) - 3\r
-        IF cc4 > lm THEN cc4 = lm\r
-\r
-        cc5 = ((c3 + c4) / 2) + (RND * 6) - 3\r
-        IF cc5 > lm THEN cc5 = lm\r
-\r
-        cc1 = ((cc2 + cc3 + cc4 + cc5) / 4) + (RND * 6) - 3\r
-        IF cc1 > lm THEN cc1 = lm\r
-\r
-        PSET (x1 + sp, y1 + sp), cc1\r
-        PSET (x1 + sp, y1), cc2\r
-        PSET (x1, y1 + sp), cc3\r
-        PSET (x1 + s, y1 + sp), cc4\r
-        PSET (x1 + sp, y1 + s), cc5\r
-    NEXT x\r
-NEXT y\r
-IF s > 2 THEN GOTO 5\r
+    CLS\r
+    SetPalette 0, 5, 5, 250\r
+    SetPalette 0, 5, 5, 251\r
+    SetPalette 0, 5, 5, 252\r
+    SetPalette 0, 5, 5, 253\r
+    SetPalette 0, 5, 5, 254\r
+    SetPalette 0, 5, 5, 255\r
+\r
+    FOR a = 0 TO 127\r
+        OUT &H3C8, a\r
+        OUT &H3C9, SIN(a / 22) * 30 + 30\r
+        OUT &H3C9, SIN(a / 18) * 5 + 5\r
+        OUT &H3C9, COS(a / 12) * 10 + 10\r
+    NEXT a\r
+\r
+    FOR a = 128 TO 245\r
+        OUT &H3C8, a\r
+        b = a - 128\r
+        OUT &H3C9, SIN(b / 22) * 4 + 10\r
+        OUT &H3C9, SIN(b / 18) * 4 + 10\r
+        OUT &H3C9, COS(b / 12) * 4 + 10\r
+    NEXT a\r
+\r
+    DIM lm\r
+    lm = 127\r
+\r
+    s = 2 ^ 8\r
+5:\r
+    s = s \ 2\r
+    x2 = (319 \ s) - 1\r
+    y2 = (199 \ s) - 1\r
+\r
+    FOR y = 0 TO y2\r
+        FOR x = 0 TO x2\r
+            x1 = x * s\r
+            y1 = y * s\r
+            c1 = POINT(x1, y1)\r
+            c2 = POINT(x1 + s, y1)\r
+            c3 = POINT(x1, y1 + s)\r
+            c4 = POINT(x1 + s, y1 + s)\r
+\r
+            sp = s \ 2\r
+\r
+            cc2 = ((c1 + c2) / 2) + (RND * 6) - 3\r
+            IF cc2 > lm THEN cc2 = lm\r
+\r
+            cc3 = ((c1 + c3) / 2) + (RND * 6) - 3\r
+            IF cc3 > lm THEN cc3 = lm\r
+\r
+            cc4 = ((c2 + c4) / 2) + (RND * 6) - 3\r
+            IF cc4 > lm THEN cc4 = lm\r
+\r
+            cc5 = ((c3 + c4) / 2) + (RND * 6) - 3\r
+            IF cc5 > lm THEN cc5 = lm\r
+\r
+            cc1 = ((cc2 + cc3 + cc4 + cc5) / 4) + (RND * 6) - 3\r
+            IF cc1 > lm THEN cc1 = lm\r
+\r
+            PSET (x1 + sp, y1 + sp), cc1\r
+            PSET (x1 + sp, y1), cc2\r
+            PSET (x1, y1 + sp), cc3\r
+            PSET (x1 + s, y1 + sp), cc4\r
+            PSET (x1 + sp, y1 + s), cc5\r
+        NEXT x\r
+    NEXT y\r
+    IF s > 2 THEN GOTO 5\r
 \r
 END SUB\r
 \r
@@ -288,7 +310,7 @@ SUB PrintText (x, y, s, c, a$)
                     IF c1 > 0 THEN PSET (x1 + x2, y1 + y), c\r
                 NEXT x1\r
             NEXT y1\r
-7\r
+7:\r
             x2 = x2 + 8\r
         NEXT a\r
     END IF\r
@@ -305,727 +327,724 @@ SUB RotatePoint (zx, zy, x1, y1, N)
 END SUB\r
 \r
 SUB Scene1\r
-SetPalette 0, 63, 20, 255\r
-DIM px(0 TO 1000)\r
-DIM py(0 TO 1000)\r
-DIM pz(0 TO 1000)\r
-DIM px1(0 TO 1000)\r
-DIM py1(0 TO 1000)\r
-DIM lin1!(0 TO 1500)\r
-DIM lin2!(0 TO 1500)\r
-DIM lbx1(1 TO 1500)\r
-DIM lby1(1 TO 1500)\r
-DIM lbx2(1 TO 1500)\r
-DIM lby2(1 TO 1500)\r
-\r
-DIM np, nl\r
-DIM an1, an2, an3\r
-DIM an1s, an2s, an3s\r
-DIM inco, inpo\r
-DIM tim\r
-DIM nlt\r
-DIM ehi\r
-\r
-tim = 0\r
-ehi = 1\r
-\r
-an1 = 0\r
-an2 = 0\r
-\r
-np = -1\r
-nl = 0\r
-inco = 0\r
-inpo = 0\r
-nlt = 0\r
-\r
-SetPalette 40, 40, 40, 254\r
-COLOR 254\r
-LOCATE 2, 11\r
-PRINT "�ks hetk"\r
-\r
-OPEN "data.dat" FOR INPUT AS #1\r
-INPUT #1, a\r
-INPUT #1, inco\r
-INPUT #1, inpo\r
-\r
-FOR a = 1 TO inco\r
-    INPUT #1, x, y, z\r
-    np = np + 1\r
-    px(np) = x - 100\r
-    py(np) = y\r
-    pz(np) = z\r
-NEXT a\r
-\r
-INPUT #1, b, b, l1, l2, l3\r
-\r
-FOR a = 1 TO inpo - 1\r
-    INPUT #1, b, b, l1!, l2!, l3!\r
-    nlin1! = l1!\r
-    nlin2! = l2!\r
-    GOSUB addlin\r
-    nlin1! = l2!\r
-    nlin2! = l3!\r
-    GOSUB addlin\r
-    nlin1! = l1!\r
-    nlin2! = l3!\r
-    GOSUB addlin\r
-    LOCATE 4, 10\r
-    PRINT STR$(INT(a / (inpo - 1) * 100)) + "% valmis"\r
-NEXT a\r
-CLOSE 1\r
-CLS\r
-\r
-3\r
-tim = tim + 1\r
-sj$ = INKEY$\r
-IF sj$ = "q" THEN END\r
-\r
-a = COS(tim / 25)\r
-an1 = COS(tim / 29) * a\r
-an2 = (pii / 2) + SIN(tim / 42) * a\r
-\r
-s1 = SIN(an1)\r
-c1 = COS(an1)\r
-s2 = SIN(an2)\r
-c2 = COS(an2)\r
-\r
-IF ehi >= 1 THEN\r
-    nlt = nlt + ehi\r
-    ehi = ehi + .03\r
-    IF nlt > nl THEN nlt = nl: ehi = 0\r
-END IF\r
-\r
-FOR a = 0 TO np\r
-    x = px(a)\r
-    y = py(a)\r
-    z = pz(a)\r
-\r
-    z2 = z * s1 + y * c1\r
-    y1 = y * s1 - z * c1\r
-\r
-    z1 = z2 * s2 + x * c2\r
-    x1 = x * s2 - z2 * c2\r
-\r
-z1 = z1 + 100\r
-\r
-x1 = x1 / z1 * 74 * 2\r
-y1 = y1 / z1 * 65 * 2\r
-\r
-px1(a) = x1 + 160\r
-py1(a) = y1 + 80\r
-NEXT a\r
-\r
-FOR a = 1 TO nlt\r
-    l1 = lin1!(a)\r
-    l2 = lin2!(a)\r
-    x1 = px1(l1)\r
-    y1 = py1(l1)\r
-    x2 = px1(l2)\r
-    y2 = py1(l2)\r
-    LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
-    LINE (x1, y1)-(x2, y2), 255\r
-    lbx1(a) = x1\r
-    lby1(a) = y1\r
-    lbx2(a) = x2\r
-    lby2(a) = y2\r
-NEXT a\r
-SOUND 0, .5\r
-IF tim < 280 THEN GOTO 3\r
-GOTO 4\r
+    SetPalette 0, 63, 20, 255\r
+    DIM px(0 TO 1000)\r
+    DIM py(0 TO 1000)\r
+    DIM pz(0 TO 1000)\r
+    DIM px1(0 TO 1000)\r
+    DIM py1(0 TO 1000)\r
+    DIM lin1!(0 TO 1500)\r
+    DIM lin2!(0 TO 1500)\r
+    DIM lbx1(1 TO 1500)\r
+    DIM lby1(1 TO 1500)\r
+    DIM lbx2(1 TO 1500)\r
+    DIM lby2(1 TO 1500)\r
+\r
+    DIM np, nl\r
+    DIM an1, an2, an3\r
+    DIM an1s, an2s, an3s\r
+    DIM inco, inpo\r
+    DIM tim\r
+    DIM nlt\r
+    DIM ehi\r
+\r
+    tim = 0\r
+    ehi = 1\r
+\r
+    an1 = 0\r
+    an2 = 0\r
+\r
+    np = -1\r
+    nl = 0\r
+    inco = 0\r
+    inpo = 0\r
+    nlt = 0\r
+\r
+    SetPalette 40, 40, 40, 254\r
+    COLOR 254\r
+    LOCATE 2, 11\r
+    PRINT "�ks hetk"\r
+\r
+    OPEN "data.dat" FOR INPUT AS #1\r
+    INPUT #1, a\r
+    INPUT #1, inco\r
+    INPUT #1, inpo\r
+\r
+    FOR a = 1 TO inco\r
+        INPUT #1, x, y, z\r
+        np = np + 1\r
+        px(np) = x - 100\r
+        py(np) = y\r
+        pz(np) = z\r
+    NEXT a\r
 \r
-addlin:\r
-FOR b = 1 TO nl\r
-    IF lin1!(b) = nlin1! THEN\r
-        IF lin2!(b) = nlin2! THEN RETURN\r
-    END IF\r
-    IF lin1!(b) = nlin2! THEN\r
-        IF lin2!(b) = nlin1! THEN RETURN\r
+    INPUT #1, b, b, l1, l2, l3\r
+\r
+    FOR a = 1 TO inpo - 1\r
+        INPUT #1, b, b, l1!, l2!, l3!\r
+        nlin1! = l1!\r
+        nlin2! = l2!\r
+        GOSUB addlin\r
+        nlin1! = l2!\r
+        nlin2! = l3!\r
+        GOSUB addlin\r
+        nlin1! = l1!\r
+        nlin2! = l3!\r
+        GOSUB addlin\r
+        LOCATE 4, 10\r
+        PRINT STR$(INT(a / (inpo - 1) * 100)) + "% valmis"\r
+    NEXT a\r
+    CLOSE 1\r
+    CLS\r
+\r
+3:\r
+    tim = tim + 1\r
+    sj$ = INKEY$\r
+    IF sj$ = "q" THEN END\r
+\r
+    a = COS(tim / 25)\r
+    an1 = COS(tim / 29) * a\r
+    an2 = (pii / 2) + SIN(tim / 42) * a\r
+\r
+    s1 = SIN(an1)\r
+    c1 = COS(an1)\r
+    s2 = SIN(an2)\r
+    c2 = COS(an2)\r
+\r
+    IF ehi >= 1 THEN\r
+        nlt = nlt + ehi\r
+        ehi = ehi + .03\r
+        IF nlt > nl THEN nlt = nl: ehi = 0\r
     END IF\r
-NEXT b\r
-nl = nl + 1\r
-lin1!(nl) = nlin1!\r
-lin2!(nl) = nlin2!\r
-RETURN\r
-\r
-4\r
-angl1 = an1\r
-angl2 = an2\r
+\r
+    FOR a = 0 TO np\r
+        x = px(a)\r
+        y = py(a)\r
+        z = pz(a)\r
+\r
+        z2 = z * s1 + y * c1\r
+        y1 = y * s1 - z * c1\r
+\r
+        z1 = z2 * s2 + x * c2\r
+        x1 = x * s2 - z2 * c2\r
+\r
+        z1 = z1 + 100\r
+\r
+        x1 = x1 / z1 * 74 * 2\r
+        y1 = y1 / z1 * 65 * 2\r
+\r
+        px1(a) = x1 + 160\r
+        py1(a) = y1 + 80\r
+    NEXT a\r
+\r
+    FOR a = 1 TO nlt\r
+        l1 = lin1!(a)\r
+        l2 = lin2!(a)\r
+        x1 = px1(l1)\r
+        y1 = py1(l1)\r
+        x2 = px1(l2)\r
+        y2 = py1(l2)\r
+        LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
+        LINE (x1, y1)-(x2, y2), 255\r
+        lbx1(a) = x1\r
+        lby1(a) = y1\r
+        lbx2(a) = x2\r
+        lby2(a) = y2\r
+    NEXT a\r
+    SOUND 0, .5\r
+    IF tim < 280 THEN GOTO 3\r
+    GOTO 4\r
+\r
+addlin:\r
+    FOR b = 1 TO nl\r
+        IF lin1!(b) = nlin1! THEN\r
+            IF lin2!(b) = nlin2! THEN RETURN\r
+        END IF\r
+        IF lin1!(b) = nlin2! THEN\r
+            IF lin2!(b) = nlin1! THEN RETURN\r
+        END IF\r
+    NEXT b\r
+    nl = nl + 1\r
+    lin1!(nl) = nlin1!\r
+    lin2!(nl) = nlin2!\r
+    RETURN\r
+\r
+4:\r
+    angl1 = an1\r
+    angl2 = an2\r
 END SUB\r
 \r
 SUB Scene2\r
-SetPalette 0, 63, 20, 255\r
-CLS\r
-angl1 = 0\r
-angl2 = 1.5\r
-DIM px(0 TO 2000)\r
-DIM py(0 TO 2000)\r
-DIM pz(0 TO 2000)\r
-\r
-DIM rpx(0 TO 2000)\r
-DIM rpy(0 TO 2000)\r
-DIM rpz(0 TO 2000)\r
-\r
-DIM pol1(1 TO 2000)\r
-DIM pol2(1 TO 2000)\r
-DIM pol3(1 TO 2000)\r
-\r
-np = 0\r
-nl = 0\r
-\r
-OPEN "data.dat" FOR INPUT AS #1\r
-INPUT #1, a\r
-INPUT #1, inco\r
-INPUT #1, inpo\r
-\r
-FOR a = 1 TO inco\r
-    INPUT #1, x, y, z\r
-    px(np) = x - 100\r
-    py(np) = y\r
-    pz(np) = z\r
-    np = np + 1\r
-NEXT a\r
-\r
-INPUT #1, b, b, l1, l2, l3\r
+    SetPalette 0, 63, 20, 255\r
+    CLS\r
+    angl1 = 0\r
+    angl2 = 1.5\r
+    DIM px(0 TO 2000)\r
+    DIM py(0 TO 2000)\r
+    DIM pz(0 TO 2000)\r
+\r
+    DIM rpx(0 TO 2000)\r
+    DIM rpy(0 TO 2000)\r
+    DIM rpz(0 TO 2000)\r
+\r
+    DIM pol1(1 TO 2000)\r
+    DIM pol2(1 TO 2000)\r
+    DIM pol3(1 TO 2000)\r
+\r
+    np = 0\r
+    nl = 0\r
+\r
+    OPEN "data.dat" FOR INPUT AS #1\r
+    INPUT #1, a\r
+    INPUT #1, inco\r
+    INPUT #1, inpo\r
+\r
+    FOR a = 1 TO inco\r
+        INPUT #1, x, y, z\r
+        px(np) = x - 100\r
+        py(np) = y\r
+        pz(np) = z\r
+        np = np + 1\r
+    NEXT a\r
 \r
-FOR a = 1 TO inpo - 1\r
     INPUT #1, b, b, l1, l2, l3\r
-    nl = nl + 1\r
-    pol1(nl) = l1\r
-    pol2(nl) = l2\r
-    pol3(nl) = l3\r
-NEXT a\r
-CLOSE 1\r
-\r
-s1 = SIN(angl1)\r
-c1 = COS(angl1)\r
-s2 = SIN(angl2)\r
-c2 = COS(angl2)\r
-\r
-FOR a = 0 TO np\r
-    x = px(a)\r
-    y = py(a)\r
-    z = pz(a)\r
-    z2 = z * s1 + y * c1\r
-    y1 = y * s1 - z * c1\r
-    z1 = z2 * s2 + x * c2\r
-    x1 = x * s2 - z2 * c2\r
-    z1 = z1 + 100\r
-    x1 = x1 / z1 * 74 * 2\r
-    y1 = y1 / z1 * 65 * 2\r
-    rpx(a) = x1 + 160\r
-    rpy(a) = y1 + 80\r
-    rpz(a) = z1\r
-NEXT a\r
-\r
-'FOR a = 1 TO 63\r
-'SetPalette COS(a / 9) * 30 + 30, SIN(a / 5) * 30 + 30, SIN(a / 13) * 30 + 30, a\r
-'NEXT a\r
-\r
-FOR a = 1 TO 49\r
-    SetPalette a * 1.1 + 20, a * 1.1 + 10, a * 1.1, a\r
-NEXT a\r
-\r
-DIM polz(1 TO nl)\r
-\r
-FOR a = 1 TO nl\r
-    polz(a) = (rpz(pol1(a)) + rpz(pol2(a)) + rpz(pol3(a)))\r
-NEXT a\r
-\r
-e = nl\r
-FOR a = 1 TO nl\r
-    su = -10000\r
-    sun = 1\r
-    FOR b = 1 TO e\r
-        IF polz(b) > su THEN su = polz(b): sun = b\r
-    NEXT b\r
 \r
-    p1 = pol1(sun)\r
-    p2 = pol2(sun)\r
-    p3 = pol3(sun)\r
+    FOR a = 1 TO inpo - 1\r
+        INPUT #1, b, b, l1, l2, l3\r
+        nl = nl + 1\r
+        pol1(nl) = l1\r
+        pol2(nl) = l2\r
+        pol3(nl) = l3\r
+    NEXT a\r
+    CLOSE #1\r
+\r
+    s1 = SIN(angl1)\r
+    c1 = COS(angl1)\r
+    s2 = SIN(angl2)\r
+    c2 = COS(angl2)\r
+\r
+    FOR a = 0 TO np\r
+        x = px(a)\r
+        y = py(a)\r
+        z = pz(a)\r
+        z2 = z * s1 + y * c1\r
+        y1 = y * s1 - z * c1\r
+        z1 = z2 * s2 + x * c2\r
+        x1 = x * s2 - z2 * c2\r
+        z1 = z1 + 100\r
+        x1 = x1 / z1 * 74 * 2\r
+        y1 = y1 / z1 * 65 * 2\r
+        rpx(a) = x1 + 160\r
+        rpy(a) = y1 + 80\r
+        rpz(a) = z1\r
+    NEXT a\r
+\r
+    'FOR a = 1 TO 63\r
+    'SetPalette COS(a / 9) * 30 + 30, SIN(a / 5) * 30 + 30, SIN(a / 13) * 30 + 30, a\r
+    'NEXT a\r
+\r
+    FOR a = 1 TO 49\r
+        SetPalette a * 1.1 + 20, a * 1.1 + 10, a * 1.1, a\r
+    NEXT a\r
+\r
+    DIM polz(1 TO nl)\r
 \r
-    polz(sun) = polz(e)\r
-    pol1(sun) = pol1(e)\r
-    pol2(sun) = pol2(e)\r
-    pol3(sun) = pol3(e)\r
-    e = e - 1\r
-    calc rpx(p1), rpy(p1), rpz(p1), rpx(p2), rpy(p2), rpz(p2), rpx(p3), rpy(p3), rpz(p3), d\r
-    fp INT(rpx(p1)), INT(rpy(p1)), INT(rpx(p2)), INT(rpy(p2)), INT(rpx(p3)), INT(rpy(p3)), INT(d)\r
-'SOUND 0, .07\r
-NEXT a\r
+    FOR a = 1 TO nl\r
+        polz(a) = (rpz(pol1(a)) + rpz(pol2(a)) + rpz(pol3(a)))\r
+    NEXT a\r
 \r
+    e = nl\r
+    FOR a = 1 TO nl\r
+        su = -10000\r
+        sun = 1\r
+        FOR b = 1 TO e\r
+            IF polz(b) > su THEN su = polz(b): sun = b\r
+        NEXT b\r
+\r
+        p1 = pol1(sun)\r
+        p2 = pol2(sun)\r
+        p3 = pol3(sun)\r
+\r
+        polz(sun) = polz(e)\r
+        pol1(sun) = pol1(e)\r
+        pol2(sun) = pol2(e)\r
+        pol3(sun) = pol3(e)\r
+        e = e - 1\r
+\r
+        calc rpx(p1), rpy(p1), rpz(p1), rpx(p2), rpy(p2), rpz(p2), rpx(p3), rpy(p3), rpz(p3), d\r
+        ' Call our renamed FillPolygon instead of old "fp"\r
+        FillPolygon INT(rpx(p1)), INT(rpy(p1)), INT(rpx(p2)), INT(rpy(p2)), INT(rpx(p3)), INT(rpy(p3)), INT(d)\r
+        'SOUND 0, .07\r
+    NEXT a\r
 END SUB\r
 \r
 SUB Scene3\r
-DIM buf(1 TO 10000)\r
-DIM buf1(0 TO 35)\r
+    DIM buf(1 TO 10000)\r
+    DIM buf1(0 TO 35)\r
 \r
-FOR a = 1 TO 20\r
-    SOUND 0, 1\r
-NEXT a\r
-FOR a = 0 TO 30\r
-    IF a <= 5 THEN buf1(a) = 120 + (SQR((20 - a) * a))\r
-    IF (a > 5) AND (a < 25) THEN buf1(a) = 120 + 10\r
-    IF a >= 25 THEN buf1(a) = 120 + (SQR((30 - a) * (a - 10)))\r
-NEXT a\r
-\r
-FOR y = 0 TO 30\r
-    FOR x = 10 TO 300 STEP 10\r
-        GET (x, 0)-(x + 9, 198), buf(1)\r
-        PUT (x, 1), buf(1), PSET\r
-    NEXT x\r
-    FOR a = 1 TO 49\r
-        SetPalette a * 1.1 + (20 - y), a * 1.1 + 10 + (y / 1.5), a * 1.1, a\r
+    FOR a = 1 TO 20\r
+        SOUND 0, 1\r
     NEXT a\r
-    SOUND 0, 1\r
-    LINE (160 - buf1(y), 20)-(160 + buf1(y), 20), 255\r
-NEXT y\r
-\r
-LOCATE 1, 1\r
-COLOR 254\r
-SetPalette 0, 0, 0, 254\r
-PRINT "Tehisintellekt"\r
-SetPalette 63, 0, 0, 253\r
-FOR y = 0 TO 8\r
-    FOR x = 0 TO 120\r
-        c = POINT(x, y)\r
-        IF c > 0 THEN CIRCLE (x * 2 + 50, y * 3 + 26), 2, 0\r
-    NEXT x\r
-    FOR x = 0 TO 120\r
-        c = POINT(x, y + 1)\r
-        IF c > 0 THEN CIRCLE (x * 2 + 50, (y + 1) * 3 + 26), 2, 253\r
-    NEXT x\r
-    SOUND 0, 2\r
-NEXT y\r
-\r
-RANDOMIZE 1\r
-\r
-FOR a = 1 TO 10\r
-    y = RND * 100 + 50\r
-    FOR x = 10 TO 300 STEP 10\r
-        GET (x, y)-(x + 9, 198), buf(1)\r
-        PUT (x, y - 1), buf(1), PSET\r
-    NEXT x\r
-NEXT a\r
-\r
-COLOR 253\r
-SetPalette 0, 0, 0, 253\r
-LOCATE 1\r
-PRINT " autor:  Svjatoslav Agejenko 30.09.2001 "\r
-GET (0, 0)-(319, 8), buf(1)\r
-LOCATE 1\r
-PRINT "                                        "\r
-PUT (0, 190), buf(1), PSET\r
-FOR a = 1 TO 32\r
-    SetPalette 0, a, a * 2, 253\r
-    SOUND 0, 1\r
-NEXT a\r
-inpur\r
+    FOR a = 0 TO 30\r
+        IF a <= 5 THEN buf1(a) = 120 + (SQR((20 - a) * a))\r
+        IF (a > 5) AND (a < 25) THEN buf1(a) = 120 + 10\r
+        IF a >= 25 THEN buf1(a) = 120 + (SQR((30 - a) * (a - 10)))\r
+    NEXT a\r
+\r
+    FOR y = 0 TO 30\r
+        FOR x = 10 TO 300 STEP 10\r
+            GET (x, 0)-(x + 9, 198), buf(1)\r
+            PUT (x, 1), buf(1), PSET\r
+        NEXT x\r
+        FOR a = 1 TO 49\r
+            SetPalette a * 1.1 + (20 - y), a * 1.1 + 10 + (y / 1.5), a * 1.1, a\r
+        NEXT a\r
+        SOUND 0, 1\r
+        LINE (160 - buf1(y), 20)-(160 + buf1(y), 20), 255\r
+    NEXT y\r
+\r
+    LOCATE 1, 1\r
+    COLOR 254\r
+    SetPalette 0, 0, 0, 254\r
+    PRINT "Tehisintellekt"\r
+    SetPalette 63, 0, 0, 253\r
+    FOR y = 0 TO 8\r
+        FOR x = 0 TO 120\r
+            c = POINT(x, y)\r
+            IF c > 0 THEN CIRCLE (x * 2 + 50, y * 3 + 26), 2, 0\r
+        NEXT x\r
+        FOR x = 0 TO 120\r
+            c = POINT(x, y + 1)\r
+            IF c > 0 THEN CIRCLE (x * 2 + 50, (y + 1) * 3 + 26), 2, 253\r
+        NEXT x\r
+        SOUND 0, 2\r
+    NEXT y\r
+\r
+    RANDOMIZE 1\r
+\r
+    FOR a = 1 TO 10\r
+        y = RND * 100 + 50\r
+        FOR x = 10 TO 300 STEP 10\r
+            GET (x, y)-(x + 9, 198), buf(1)\r
+            PUT (x, y - 1), buf(1), PSET\r
+        NEXT x\r
+    NEXT a\r
+\r
+    COLOR 253\r
+    SetPalette 0, 0, 0, 253\r
+    LOCATE 1\r
+    PRINT " autor:  Svjatoslav Agejenko 30.09.2001 "\r
+    GET (0, 0)-(319, 8), buf(1)\r
+    LOCATE 1\r
+    PRINT "                                        "\r
+    PUT (0, 190), buf(1), PSET\r
+    FOR a = 1 TO 32\r
+        SetPalette 0, a, a * 2, 253\r
+        SOUND 0, 1\r
+    NEXT a\r
+    inpur\r
 END SUB\r
 \r
 SUB Scene4\r
-RANDOMIZE 1\r
-mkback\r
-\r
-box 30, 50, 290, 150\r
-\r
-SetPalette 32, 64, 32, 250\r
-y = 0\r
-PrintText 30, 70 + y, 1, 250, " Spatial vision"\r
-y = y + 16\r
-PrintText 30, 70 + y, 1, 250, "Object recognition"\r
-y = y + 20\r
-PrintText 30, 70 + y, 1, 250, "Goal:    + interpriteerimine"\r
-y = y + 16\r
-PrintText 30, 70 + y, 1, 250, "            + automaatjuhtimine"\r
-\r
-inpur\r
+    RANDOMIZE 1\r
+    mkback\r
+\r
+    box 30, 50, 290, 150\r
+\r
+    SetPalette 32, 64, 32, 250\r
+    y = 0\r
+    PrintText 30, 70 + y, 1, 250, " Spatial vision"\r
+    y = y + 16\r
+    PrintText 30, 70 + y, 1, 250, "Object recognition"\r
+    y = y + 20\r
+    PrintText 30, 70 + y, 1, 250, "Goal:    + interpriteerimine"\r
+    y = y + 16\r
+    PrintText 30, 70 + y, 1, 250, "            + automaatjuhtimine"\r
+\r
+    inpur\r
 END SUB\r
 \r
 SUB Scene5\r
-RANDOMIZE 4\r
-mkback\r
-\r
-box 30, 50, 290, 150\r
-\r
-SetPalette 32, 64, 32, 250\r
-y = -8\r
-PrintText 30, 70 + y, 1, 250, "Tunnuste ekstraheerimise protsess"\r
-y = y + 20\r
-PrintText 30, 70 + y, 1, 250, "a) Laplace - Gaussi operaator;"\r
-y = y + 12\r
-PrintText 30, 70 + y, 1, 250, "b) lainekese teisenduse multi-"\r
-y = y + 12\r
-PrintText 30, 70 + y, 1, 250, "   skaalaline serva avastamine;"\r
-y = y + 12\r
-PrintText 30, 70 + y, 1, 250, "c) h�perveeru teooria lihtsate"\r
-y = y + 12\r
-PrintText 30, 70 + y, 1, 250, "   rakkude p�him�tted."\r
-\r
-inpur\r
+    RANDOMIZE 4\r
+    mkback\r
+\r
+    box 30, 50, 290, 150\r
+\r
+    SetPalette 32, 64, 32, 250\r
+    y = -8\r
+    PrintText 30, 70 + y, 1, 250, "Tunnuste ekstraheerimise protsess"\r
+    y = y + 20\r
+    PrintText 30, 70 + y, 1, 250, "a) Laplace - Gaussi operaator;"\r
+    y = y + 12\r
+    PrintText 30, 70 + y, 1, 250, "b) lainekese teisenduse multi-"\r
+    y = y + 12\r
+    PrintText 30, 70 + y, 1, 250, "   skaalaline serva avastamine;"\r
+    y = y + 12\r
+    PrintText 30, 70 + y, 1, 250, "c) h�perveeru teooria lihtsate"\r
+    y = y + 12\r
+    PrintText 30, 70 + y, 1, 250, "   rakkude p�him�tted."\r
+\r
+    inpur\r
 END SUB\r
 \r
 SUB Scene7\r
-SetPalette 0, 0, 0, 0\r
-FOR a = 0 TO 19\r
-    FOR y = a TO 199 STEP 20\r
-        LINE (0, y)-(319, y), 0\r
-    NEXT y\r
-    SOUND 0, .5\r
-NEXT a\r
-\r
+    SetPalette 0, 0, 0, 0\r
+    FOR a = 0 TO 19\r
+        FOR y = a TO 199 STEP 20\r
+            LINE (0, y)-(319, y), 0\r
+        NEXT y\r
+        SOUND 0, .5\r
+    NEXT a\r
 END SUB\r
 \r
 SUB Scene8\r
-FOR a = 1 TO 50\r
-    SetPalette 0, 0, 0, a\r
-NEXT a\r
-\r
-DIM px(0 TO 800)\r
-DIM py(0 TO 800)\r
-DIM pz(0 TO 800)\r
-DIM lin1(0 TO 1000)\r
-DIM lin2(0 TO 1000)\r
-DIM linc(0 TO 1000)\r
-DIM lbx1(1 TO 1000)\r
-DIM lby1(1 TO 1000)\r
-DIM lbx2(1 TO 1000)\r
-DIM lby2(1 TO 1000)\r
-DIM px1(0 TO 800)\r
-DIM py1(0 TO 800)\r
-DIM hlkx(1 TO 50)\r
-DIM hlky(1 TO 50)\r
-DIM hlkz(1 TO 50)\r
-DIM hlka\r
-DIM hlkr\r
-DIM hlknu\r
-DIM hlkin\r
-DIM hlax, hlay, hlaz\r
-DIM mx, mz, my\r
-DIM desx, desz\r
-DIM desa\r
-\r
-DIM np, nl\r
-DIM an1, an2\r
-DIM tim\r
-DIM eta\r
-DIM mil\r
-DIM miin\r
-\r
-miin = 0\r
-mil = 25\r
-tim = 0\r
-eta = 1\r
-an1 = 0\r
-an2 = 0\r
-\r
-np = 0\r
-nl = 0\r
-RANDOMIZE 100\r
-s = 64\r
-\r
-14\r
-sp = s / 2\r
-FOR y = 0 TO 100 STEP s\r
-    FOR x = 0 TO 100 STEP s\r
-        c1 = POINT(x, y)\r
-        c2 = POINT(x + s, y)\r
-        c3 = POINT(x, y + s)\r
-        c4 = POINT(x + s, y + s)\r
-        c5 = (c1 + c2 + c3 + c4) / 4 + RND * s * 6 - sp * 7\r
-        c6 = (c2 + c4) / 2 + RND * s * 6 - sp * 7\r
-        c7 = (c3 + c4) / 2 + RND * s * 6 - sp * 7\r
-        IF c5 > 50 THEN c5 = 50\r
-        IF c5 < 0 THEN c5 = 0\r
-        IF c6 > 50 THEN c6 = 50\r
-        IF c6 < 0 THEN c6 = 0\r
-        IF c7 > 50 THEN c7 = 50\r
-        IF c7 < 0 THEN c7 = 0\r
-        PSET (x + sp, y + sp), c5\r
-        PSET (x + s, y + sp), c6\r
-        PSET (x + sp, y + s), c7\r
-    NEXT x\r
-NEXT y\r
-s = s / 2\r
-IF s > 1 THEN GOTO 14\r
-\r
-'a$ = INPUT$(1)\r
-\r
-FOR z = 1 TO 400 STEP 20\r
-    FOR x = 1 TO 400 STEP 20\r
-        np = np + 1\r
-        px(np) = x\r
-        py(np) = POINT(z / 20 + 10, x / 20 + 10) * 2\r
-        pz(np) = z\r
-        IF x > 1 THEN\r
-            nl = nl + 1\r
-            lin1(nl) = np\r
-            lin2(nl) = np - 1\r
-            linc(nl) = 1\r
-        END IF\r
-        IF z > 1 THEN\r
-            nl = nl + 1\r
-            lin1(nl) = np\r
-            lin2(nl) = np - 20\r
-            linc(nl) = 1\r
-        END IF\r
-    NEXT x\r
-NEXT z\r
-\r
-LINE (0, 0)-(319, 199), 0, BF\r
-\r
-SetPalette 0, 0, 0, 0\r
-SetPalette 0, 40, 10, 1\r
-SetPalette 0, 32, 64, 2\r
-SetPalette 50, 50, 0, 3\r
-SetPalette 64, 20, 0, 4\r
-\r
-mx = 200\r
-mz = 200\r
-kau = 1000\r
-hlax = 200\r
-hlay = 0\r
-hlaz = 200\r
-desx = 200\r
-desz = 200\r
-\r
-OPEN "data2.dat" FOR INPUT AS #1\r
-a = 0\r
-b = 0\r
-hlkin = np + 1\r
-\r
-15\r
-INPUT #1, x, y, z\r
-IF x = 999 THEN GOTO 16\r
-a = a + 1\r
-hlkx(a) = x\r
-hlky(a) = -y\r
-hlkz(a) = z\r
-GOTO 15\r
-\r
-16\r
-INPUT #1, x, y\r
-IF x = 999 THEN GOTO 17\r
-nl = nl + 1\r
-lin1(nl) = x + np + 1\r
-lin2(nl) = y + np + 1\r
-linc(nl) = 2\r
-GOTO 16\r
-\r
-17\r
-CLOSE #1\r
-np = np + a\r
-hlknu = a\r
-\r
-RANDOMIZE 10\r
-c = 3\r
-FOR a = 1 TO 25\r
-    p = RND * 396 + 2\r
-    x = px(p)\r
-    z = pz(p)\r
-    yy = py(p) - 4\r
-\r
-    px(np + 1) = x - 5\r
-    py(np + 1) = yy\r
-    pz(np + 1) = z - 5\r
-\r
-    px(np + 2) = x + 5\r
-    py(np + 2) = yy\r
-    pz(np + 2) = z - 5\r
-\r
-    px(np + 3) = x + 5\r
-    py(np + 3) = yy\r
-    pz(np + 3) = z + 5\r
-\r
-    px(np + 4) = x - 5\r
-    py(np + 4) = yy\r
-    pz(np + 4) = z + 5\r
-\r
-    px(np + 5) = x\r
-    py(np + 5) = yy - 5\r
-    pz(np + 5) = z\r
-\r
-    lin1(nl + 1) = np + 1\r
-    lin2(nl + 1) = np + 2\r
-    linc(nl + 1) = c\r
-\r
-    lin1(nl + 2) = np + 2\r
-    lin2(nl + 2) = np + 3\r
-    linc(nl + 2) = c\r
-\r
-    lin1(nl + 3) = np + 3\r
-    lin2(nl + 3) = np + 4\r
-    linc(nl + 3) = c\r
-\r
-    lin1(nl + 4) = np + 4\r
-    lin2(nl + 4) = np + 1\r
-    linc(nl + 4) = c\r
-\r
-    lin1(nl + 5) = np + 1\r
-    lin2(nl + 5) = np + 5\r
-    linc(nl + 5) = c\r
-\r
-    lin1(nl + 6) = np + 2\r
-    lin2(nl + 6) = np + 5\r
-    linc(nl + 6) = c\r
-\r
-    lin1(nl + 7) = np + 3\r
-    lin2(nl + 7) = np + 5\r
-    linc(nl + 7) = c\r
-\r
-    lin1(nl + 8) = np + 4\r
-    lin2(nl + 8) = np + 5\r
-    linc(nl + 8) = c\r
-\r
-    np = np + 5\r
-    nl = nl + 8\r
-NEXT a\r
-\r
-10\r
-SOUND 0, 1\r
-IF INKEY$ <> "" THEN miin = 1\r
-IF miin > 150 THEN GOTO 13\r
-IF miin <> 0 THEN miin = miin + 7\r
-mx = hlax\r
-my = 50 - hlay - miin\r
-mz = hlaz\r
-\r
-SELECT CASE eta\r
-CASE 1\r
-    desx = px(np)\r
-    desz = pz(np)\r
-    getan desx, desz, hlax, hlaz, desa\r
-    IF desa - hlka > pi THEN desa = desa - (pi * 2)\r
-    IF hlka - desa > pi THEN desa = desa + (pi * 2)\r
-    eta = 2\r
-    FOR a = nl - 7 TO nl\r
-        linc(a) = 4\r
+    FOR a = 1 TO 50\r
+        SetPalette 0, 0, 0, a\r
     NEXT a\r
-CASE 2\r
-    a = desa - hlka\r
-    IF desa = hlka THEN eta = 3\r
-    IF a > .05 THEN a = .05\r
-    IF a < -.05 THEN a = -.05\r
-    hlka = hlka + a\r
-CASE 3\r
-    x = desx - hlax\r
-    z = desz - hlaz\r
-    v = SQR(x * x + z * z)\r
-    IF v < 5 THEN eta = 4\r
-    v = v / 2\r
-    hlax = hlax + x / v\r
-    hlaz = hlaz + z / v\r
-CASE 4\r
-    FOR a = np - 4 TO np\r
-        py(a) = py(a) - 1\r
+\r
+    DIM px(0 TO 800)\r
+    DIM py(0 TO 800)\r
+    DIM pz(0 TO 800)\r
+    DIM lin1(0 TO 1000)\r
+    DIM lin2(0 TO 1000)\r
+    DIM linc(0 TO 1000)\r
+    DIM lbx1(1 TO 1000)\r
+    DIM lby1(1 TO 1000)\r
+    DIM lbx2(1 TO 1000)\r
+    DIM lby2(1 TO 1000)\r
+    DIM px1(0 TO 800)\r
+    DIM py1(0 TO 800)\r
+    DIM hlkx(1 TO 50)\r
+    DIM hlky(1 TO 50)\r
+    DIM hlkz(1 TO 50)\r
+    DIM hlka\r
+    DIM hlkr\r
+    DIM hlknu\r
+    DIM hlkin\r
+    DIM hlax, hlay, hlaz\r
+    DIM mx, mz, my\r
+    DIM desx, desz\r
+    DIM desa\r
+\r
+    DIM np, nl\r
+    DIM an1, an2\r
+    DIM tim\r
+    DIM eta\r
+    DIM mil\r
+    DIM miin\r
+\r
+    miin = 0\r
+    mil = 25\r
+    tim = 0\r
+    eta = 1\r
+    an1 = 0\r
+    an2 = 0\r
+\r
+    np = 0\r
+    nl = 0\r
+    RANDOMIZE 100\r
+    s = 64\r
+\r
+14:\r
+    sp = s / 2\r
+    FOR y = 0 TO 100 STEP s\r
+        FOR x = 0 TO 100 STEP s\r
+            c1 = POINT(x, y)\r
+            c2 = POINT(x + s, y)\r
+            c3 = POINT(x, y + s)\r
+            c4 = POINT(x + s, y + s)\r
+            c5 = (c1 + c2 + c3 + c4) / 4 + RND * s * 6 - sp * 7\r
+            c6 = (c2 + c4) / 2 + RND * s * 6 - sp * 7\r
+            c7 = (c3 + c4) / 2 + RND * s * 6 - sp * 7\r
+            IF c5 > 50 THEN c5 = 50\r
+            IF c5 < 0 THEN c5 = 0\r
+            IF c6 > 50 THEN c6 = 50\r
+            IF c6 < 0 THEN c6 = 0\r
+            IF c7 > 50 THEN c7 = 50\r
+            IF c7 < 0 THEN c7 = 0\r
+            PSET (x + sp, y + sp), c5\r
+            PSET (x + s, y + sp), c6\r
+            PSET (x + sp, y + s), c7\r
+        NEXT x\r
+    NEXT y\r
+    s = s / 2\r
+    IF s > 1 THEN GOTO 14\r
+\r
+    'a$ = INPUT$(1)\r
+\r
+    FOR z = 1 TO 400 STEP 20\r
+        FOR x = 1 TO 400 STEP 20\r
+            np = np + 1\r
+            px(np) = x\r
+            py(np) = POINT(z / 20 + 10, x / 20 + 10) * 2\r
+            pz(np) = z\r
+            IF x > 1 THEN\r
+                nl = nl + 1\r
+                lin1(nl) = np\r
+                lin2(nl) = np - 1\r
+                linc(nl) = 1\r
+            END IF\r
+            IF z > 1 THEN\r
+                nl = nl + 1\r
+                lin1(nl) = np\r
+                lin2(nl) = np - 20\r
+                linc(nl) = 1\r
+            END IF\r
+        NEXT x\r
+    NEXT z\r
+\r
+    LINE (0, 0)-(319, 199), 0, BF\r
+\r
+    SetPalette 0, 0, 0, 0\r
+    SetPalette 0, 40, 10, 1\r
+    SetPalette 0, 32, 64, 2\r
+    SetPalette 50, 50, 0, 3\r
+    SetPalette 64, 20, 0, 4\r
+\r
+    mx = 200\r
+    mz = 200\r
+    kau = 1000\r
+    hlax = 200\r
+    hlay = 0\r
+    hlaz = 200\r
+    desx = 200\r
+    desz = 200\r
+\r
+    OPEN "data2.dat" FOR INPUT AS #1\r
+    a = 0\r
+    b = 0\r
+    hlkin = np + 1\r
+\r
+15:\r
+    INPUT #1, x, y, z\r
+    IF x = 999 THEN GOTO 16\r
+    a = a + 1\r
+    hlkx(a) = x\r
+    hlky(a) = -y\r
+    hlkz(a) = z\r
+    GOTO 15\r
+\r
+16:\r
+    INPUT #1, x, y\r
+    IF x = 999 THEN GOTO 17\r
+    nl = nl + 1\r
+    lin1(nl) = x + np + 1\r
+    lin2(nl) = y + np + 1\r
+    linc(nl) = 2\r
+    GOTO 16\r
+\r
+17:\r
+    CLOSE #1\r
+    np = np + a\r
+    hlknu = a\r
+\r
+    RANDOMIZE 10\r
+    c = 3\r
+    FOR a = 1 TO 25\r
+        p = RND * 396 + 2\r
+        x = px(p)\r
+        z = pz(p)\r
+        yy = py(p) - 4\r
+\r
+        px(np + 1) = x - 5\r
+        py(np + 1) = yy\r
+        pz(np + 1) = z - 5\r
+\r
+        px(np + 2) = x + 5\r
+        py(np + 2) = yy\r
+        pz(np + 2) = z - 5\r
+\r
+        px(np + 3) = x + 5\r
+        py(np + 3) = yy\r
+        pz(np + 3) = z + 5\r
+\r
+        px(np + 4) = x - 5\r
+        py(np + 4) = yy\r
+        pz(np + 4) = z + 5\r
+\r
+        px(np + 5) = x\r
+        py(np + 5) = yy - 5\r
+        pz(np + 5) = z\r
+\r
+        lin1(nl + 1) = np + 1\r
+        lin2(nl + 1) = np + 2\r
+        linc(nl + 1) = c\r
+\r
+        lin1(nl + 2) = np + 2\r
+        lin2(nl + 2) = np + 3\r
+        linc(nl + 2) = c\r
+\r
+        lin1(nl + 3) = np + 3\r
+        lin2(nl + 3) = np + 4\r
+        linc(nl + 3) = c\r
+\r
+        lin1(nl + 4) = np + 4\r
+        lin2(nl + 4) = np + 1\r
+        linc(nl + 4) = c\r
+\r
+        lin1(nl + 5) = np + 1\r
+        lin2(nl + 5) = np + 5\r
+        linc(nl + 5) = c\r
+\r
+        lin1(nl + 6) = np + 2\r
+        lin2(nl + 6) = np + 5\r
+        linc(nl + 6) = c\r
+\r
+        lin1(nl + 7) = np + 3\r
+        lin2(nl + 7) = np + 5\r
+        linc(nl + 7) = c\r
+\r
+        lin1(nl + 8) = np + 4\r
+        lin2(nl + 8) = np + 5\r
+        linc(nl + 8) = c\r
+\r
+        np = np + 5\r
+        nl = nl + 8\r
     NEXT a\r
-    IF py(np) < 3 - hlay THEN\r
+\r
+10:\r
+    SOUND 0, 1\r
+    IF INKEY$ <> "" THEN miin = 1\r
+    IF miin > 150 THEN GOTO 13\r
+    IF miin <> 0 THEN miin = miin + 7\r
+    mx = hlax\r
+    my = 50 - hlay - miin\r
+    mz = hlaz\r
+\r
+    SELECT CASE eta\r
+    CASE 1\r
+        desx = px(np)\r
+        desz = pz(np)\r
+        getan desx, desz, hlax, hlaz, desa\r
+        IF desa - hlka > pi THEN desa = desa - (pi * 2)\r
+        IF hlka - desa > pi THEN desa = desa + (pi * 2)\r
+        eta = 2\r
         FOR a = nl - 7 TO nl\r
-            LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
+            linc(a) = 4\r
         NEXT a\r
-        np = np - 5\r
-        nl = nl - 8\r
-        mil = mil - 1\r
-        eta = 6\r
-        IF mil <= 0 THEN eta = 7\r
-    END IF\r
-CASE 6\r
-    eta = 5\r
-CASE 5\r
-    eta = 1\r
-END SELECT\r
-\r
-y = 60 - py(INT((hlaz + 10) / 20) * 20 + INT((hlax + 10) / 20))\r
-IF hlay > y + 5 THEN hlay = hlay - 1\r
-IF hlay < y THEN hlay = hlay + 1\r
-IF hlay > y + 25 THEN hlay = hlay - 1: ' SOUND 1000, 1\r
-IF hlay < y - 20 THEN hlay = hlay + 1: ' SOUND 1000, 1\r
-\r
-s1 = SIN(hlka)\r
-c1 = COS(hlka)\r
-FOR a = 0 TO hlknu - 5\r
-    x = hlkx(a + 1)\r
-    z = hlkz(a + 1)\r
-    px(a + hlkin) = x * s1 + z * c1 + hlax\r
-    py(a + hlkin) = hlky(a + 1) - hlay\r
-    pz(a + hlkin) = z * s1 - x * c1 + hlaz\r
-NEXT a\r
-\r
-hlkr = hlkr + .5\r
-s1 = SIN(hlkr)\r
-c1 = COS(hlkr)\r
-FOR a = hlknu - 4 TO hlknu - 1\r
-    x = hlkx(a + 1)\r
-    z = hlkz(a + 1)\r
-    px(a + hlkin) = x * s1 + z * c1 + hlax\r
-    py(a + hlkin) = hlky(a + 1) - hlay\r
-    pz(a + hlkin) = z * s1 - x * c1 + hlaz\r
-NEXT a\r
-\r
-tim = tim + 1\r
-\r
-an1 = an1 + SIN(tim / 100) / 20\r
-an2 = SIN(tim / 42) * .3 + 1.15\r
-\r
-s1 = SIN(an1)\r
-c1 = COS(an1)\r
-s2 = SIN(an2)\r
-c2 = COS(an2)\r
-\r
-FOR a = 0 TO np\r
-    x = px(a) - mx\r
-    y = py(a) - my\r
-    z = pz(a) - mz\r
-\r
-z2 = z * s1 + x * c1\r
-x1 = x * s1 - z * c1\r
-\r
-z1 = z2 * s2 + y * c2\r
-y1 = y * s2 - z2 * c2\r
-\r
-\r
-    z1 = z1 + kau\r
-    IF z1 < 1 THEN px1(a) = -1: GOTO 11\r
-    x1 = x1 / z1 * 74 * 2\r
-    y1 = y1 / z1 * 65 * 2\r
-\r
-    px1(a) = x1 + 160\r
-    py1(a) = y1 + 80\r
-11\r
-NEXT a\r
-\r
-FOR a = 1 TO nl\r
-    l1 = lin1!(a)\r
-    l2 = lin2!(a)\r
-    x1 = px1(l1)\r
-    x2 = px1(l2)\r
-    LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
-    IF (x1 = -1) OR (x2 = -1) THEN GOTO 12\r
-    y1 = py1(l1)\r
-    y2 = py1(l2)\r
-    LINE (x1, y1)-(x2, y2), linc(a)\r
-    lbx1(a) = x1\r
-    lby1(a) = y1\r
-    lbx2(a) = x2\r
-    lby2(a) = y2\r
-12\r
-NEXT a\r
-IF kau > 200 THEN kau = kau - 10\r
-IF tim < 28000 THEN GOTO 10\r
-13\r
-END SUB\r
+    CASE 2\r
+        a = desa - hlka\r
+        IF desa = hlka THEN eta = 3\r
+        IF a > .05 THEN a = .05\r
+        IF a < -.05 THEN a = -.05\r
+        hlka = hlka + a\r
+    CASE 3\r
+        x = desx - hlax\r
+        z = desz - hlaz\r
+        v = SQR(x * x + z * z)\r
+        IF v < 5 THEN eta = 4\r
+        v = v / 2\r
+        hlax = hlax + x / v\r
+        hlaz = hlaz + z / v\r
+    CASE 4\r
+        FOR a = np - 4 TO np\r
+            py(a) = py(a) - 1\r
+        NEXT a\r
+        IF py(np) < 3 - hlay THEN\r
+            FOR a = nl - 7 TO nl\r
+                LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
+            NEXT a\r
+            np = np - 5\r
+            nl = nl - 8\r
+            mil = mil - 1\r
+            eta = 6\r
+            IF mil <= 0 THEN eta = 7\r
+        END IF\r
+    CASE 6\r
+        eta = 5\r
+    CASE 5\r
+        eta = 1\r
+    END SELECT\r
+\r
+    y = 60 - py(INT((hlaz + 10) / 20) * 20 + INT((hlax + 10) / 20))\r
+    IF hlay > y + 5 THEN hlay = hlay - 1\r
+    IF hlay < y THEN hlay = hlay + 1\r
+    IF hlay > y + 25 THEN hlay = hlay - 1: ' SOUND 1000, 1\r
+    IF hlay < y - 20 THEN hlay = hlay + 1: ' SOUND 1000, 1\r
+\r
+    s1 = SIN(hlka)\r
+    c1 = COS(hlka)\r
+    FOR a = 0 TO hlknu - 5\r
+        x = hlkx(a + 1)\r
+        z = hlkz(a + 1)\r
+        px(a + hlkin) = x * s1 + z * c1 + hlax\r
+        py(a + hlkin) = hlky(a + 1) - hlay\r
+        pz(a + hlkin) = z * s1 - x * c1 + hlaz\r
+    NEXT a\r
 \r
-SUB Scene9\r
+    hlkr = hlkr + .5\r
+    s1 = SIN(hlkr)\r
+    c1 = COS(hlkr)\r
+    FOR a = hlknu - 4 TO hlknu - 1\r
+        x = hlkx(a + 1)\r
+        z = hlkz(a + 1)\r
+        px(a + hlkin) = x * s1 + z * c1 + hlax\r
+        py(a + hlkin) = hlky(a + 1) - hlay\r
+        pz(a + hlkin) = z * s1 - x * c1 + hlaz\r
+    NEXT a\r
+\r
+    tim = tim + 1\r
+\r
+    an1 = an1 + SIN(tim / 100) / 20\r
+    an2 = SIN(tim / 42) * .3 + 1.15\r
+\r
+    s1 = SIN(an1)\r
+    c1 = COS(an1)\r
+    s2 = SIN(an2)\r
+    c2 = COS(an2)\r
+\r
+    FOR a = 0 TO np\r
+        x = px(a) - mx\r
+        y = py(a) - my\r
+        z = pz(a) - mz\r
+\r
+        z2 = z * s1 + x * c1\r
+        x1 = x * s1 - z * c1\r
 \r
-RANDOMIZE 45\r
-mkback\r
+        z1 = z2 * s2 + y * c2\r
+        y1 = y * s2 - z2 * c2\r
 \r
-box 30, 50, 290, 80\r
+        z1 = z1 + kau\r
+        IF z1 < 1 THEN px1(a) = -1: GOTO 11\r
+        x1 = x1 / z1 * 74 * 2\r
+        y1 = y1 / z1 * 65 * 2\r
 \r
-SetPalette 32, 64, 32, 250\r
-y = -8\r
-PrintText 30, 70 + y, 1, 250, "     Thank you for attention!"\r
-inpur\r
+        px1(a) = x1 + 160\r
+        py1(a) = y1 + 80\r
+11:\r
+    NEXT a\r
+\r
+    FOR a = 1 TO nl\r
+        l1 = lin1!(a)\r
+        l2 = lin2!(a)\r
+        x1 = px1(l1)\r
+        x2 = px1(l2)\r
+        LINE (lbx1(a), lby1(a))-(lbx2(a), lby2(a)), 0\r
+        IF (x1 = -1) OR (x2 = -1) THEN GOTO 12\r
+        y1 = py1(l1)\r
+        y2 = py1(l2)\r
+        LINE (x1, y1)-(x2, y2), linc(a)\r
+        lbx1(a) = x1\r
+        lby1(a) = y1\r
+        lbx2(a) = x2\r
+        lby2(a) = y2\r
+12:\r
+    NEXT a\r
+    IF kau > 200 THEN kau = kau - 10\r
+    IF tim < 28000 THEN GOTO 10\r
+13:\r
+END SUB\r
 \r
+SUB Scene9\r
+    RANDOMIZE 45\r
+    mkback\r
+\r
+    box 30, 50, 290, 80\r
+\r
+    SetPalette 32, 64, 32, 250\r
+    y = -8\r
+    PrintText 30, 70 + y, 1, 250, "     Thank you for attention!"\r
+    inpur\r
 END SUB\r
 \r
 ' Subroutine to set color palette\r
@@ -1046,10 +1065,9 @@ SUB SetPalette (r, g, b, c)
 END SUB\r
 \r
 SUB start\r
-SCREEN 13\r
-pi = 3.141592\r
-pii = pi\r
-fac = 360 / (pi * 2)\r
-InitializeFont\r
+    SCREEN 13\r
+    pi = 3.141592\r
+    pii = pi\r
+    fac = 360 / (pi * 2)\r
+    InitializeFont\r
 END SUB\r
-\r