Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Updated old Googly Eyes screen saver
#11
(07-10-2023, 06:31 AM)vince Wrote: I have attempted a similar mod a long time ago, bplus, but I was incapable of getting it to work correctly as it can be challenging

Code: (Select All)
$resize:on

deflng a-z

sw = 640
sh = 600

screen _newimage(sw,sh,32),,1,0

line (0,0)-(sw,sh),_rgb(255,255,255),bf

ellipsef sw/4, sh/2, 0.9*sw/4, 0.9*sh/2, _rgb(0,0,0)
ellipsef 3*sw/4, sh/2, 0.9*sw/4, 0.9*sh/2, _rgb(0,0,0)

ellipsef sw/4, sh/2, 0.8*sw/4, 0.8*sh/2, _rgb(255,255,255)
ellipsef 3*sw/4, sh/2, 0.8*sw/4, 0.8*sh/2, _rgb(255,255,255)

screen ,,0,0

dim a as double, b as double
do
    do
        mx = _mousex
        my = _mousey
    loop while _mouseinput

    if _resize then
        sw = _resizewidth
        sh = _resizeheight

        screen ,,1,0
        line (0,0)-(sw,sh),_rgb(255,255,255),bf

        ellipsef sw/4, sh/2, 0.9*sw/4, 0.9*sh/2, _rgb(0,0,0)
        ellipsef 3*sw/4, sh/2, 0.9*sw/4, 0.9*sh/2, _rgb(0,0,0)

        ellipsef sw/4, sh/2, 0.8*sw/4, 0.8*sh/2, _rgb(255,255,255)
        ellipsef 3*sw/4, sh/2, 0.8*sw/4, 0.8*sh/2, _rgb(255,255,255)
        screen ,,0,0
    end if

    pcopy 1,0

    a = _atan2(sh/2 - my, sw/4 - mx)
    b = _atan2(sh/2 - my, 3*sw/4 - mx)

    x1 = sw/4 - 0.5*sw*cos(a)/4
    y1 = sh/2 - 0.5*sh*sin(a)/2
    if abs(sw/4-mx) < 0.5*sw/4 or abs(sh/2-my) < 0.5*sh/2 then
        x1 = mx
        y1 = my
    end if

    x2 = 3*sw/4 - 0.5*sw*cos(b)/4
    y2 = sh/2 - 0.5*sh*sin(b)/2
    if abs(3*sw/4-mx) < 0.5*sw/4 or abs(sh/2-my) < 0.5*sh/2 then
        x2 = mx
        y2 = my
    end if

    ellipsef x1, y1, 0.2*sw/4, 0.2*sh/2, _rgb(0,0,0)
    ellipsef x2, y2, 0.2*sw/4, 0.2*sh/2, _rgb(0,0,0)

    _display
loop until _keyhit = 27
system

sub ellipsef (x0, y0, rx, ry, c)
    a = 2*rx*rx
    b = 2*ry*ry

    x = rx
    y = 0
    xx = ry*ry*(1 - 2*rx)
    yy = rx*rx

    e = 0
    sx = b*rx
    sy = 0

    do while sx >= sy
        line (x0 - x, y0 + y)-(x0 + x, y0 + y), c, bf
        line (x0 - x, y0 - y)-(x0 + x, y0 - y), c, bf

        y = y + 1
        sy = sy + a
        e = e + yy
        yy = yy + a

        if 2*e + xx > 0 then
            x = x - 1
            sx = sx - b
            e = e + xx
            xx = xx + b
        end if
    loop

    x = 0
    y = ry
    xx = rx*ry
    yy = rx*rx*(1 - 2*ry)

    e = 0
    sx = 0
    sy = a*ry

    do while sx <= sy
        line (x0 - x, y0 - y)-(x0 + x, y0 - y), c, bf
        line (x0 - x, y0 + y)-(x0 + x, y0 + y), c, bf

        x = x + 1
        sx = sx + b
        e = e + xx
        xx = xx + b

        if 2*e + yy > 0 then
            y = y - 1
            sy = sy - a
            e = e + yy
            yy = yy + a
        end if
    loop
end sub

Hey @vince just get rid of the If Abs(... blocks
Code: (Select All)
$Resize:On

DefLng A-Z

sw = 640
sh = 600

Screen _NewImage(sw, sh, 32), , 1, 0

Line (0, 0)-(sw, sh), _RGB(255, 255, 255), BF

ellipsef sw / 4, sh / 2, 0.9 * sw / 4, 0.9 * sh / 2, _RGB(0, 0, 0)
ellipsef 3 * sw / 4, sh / 2, 0.9 * sw / 4, 0.9 * sh / 2, _RGB(0, 0, 0)

ellipsef sw / 4, sh / 2, 0.8 * sw / 4, 0.8 * sh / 2, _RGB(255, 255, 255)
ellipsef 3 * sw / 4, sh / 2, 0.8 * sw / 4, 0.8 * sh / 2, _RGB(255, 255, 255)

Screen , , 0, 0

Dim a As Double, b As Double
Do
    Do: Loop While _MouseInput
    mx = _MouseX
    my = _MouseY


    If _Resize Then
        sw = _ResizeWidth
        sh = _ResizeHeight

        Screen , , 1, 0
        Line (0, 0)-(sw, sh), _RGB(255, 255, 255), BF

        ellipsef sw / 4, sh / 2, 0.9 * sw / 4, 0.9 * sh / 2, _RGB(0, 0, 0)
        ellipsef 3 * sw / 4, sh / 2, 0.9 * sw / 4, 0.9 * sh / 2, _RGB(0, 0, 0)

        ellipsef sw / 4, sh / 2, 0.8 * sw / 4, 0.8 * sh / 2, _RGB(255, 255, 255)
        ellipsef 3 * sw / 4, sh / 2, 0.8 * sw / 4, 0.8 * sh / 2, _RGB(255, 255, 255)
        Screen , , 0, 0
    End If

    PCopy 1, 0

    a = _Atan2(sh / 2 - my, sw / 4 - mx)
    b = _Atan2(sh / 2 - my, 3 * sw / 4 - mx)

    x1 = sw / 4 - 0.5 * sw * Cos(a) / 4
    y1 = sh / 2 - 0.5 * sh * Sin(a) / 2

    x2 = 3 * sw / 4 - 0.5 * sw * Cos(b) / 4
    y2 = sh / 2 - 0.5 * sh * Sin(b) / 2

    ellipsef x1, y1, 0.2 * sw / 4, 0.2 * sh / 2, _RGB(0, 0, 0)
    ellipsef x2, y2, 0.2 * sw / 4, 0.2 * sh / 2, _RGB(0, 0, 0)

    _Display
Loop Until _KeyHit = 27
System

Sub ellipsef (x0, y0, rx, ry, c)
    a = 2 * rx * rx
    b = 2 * ry * ry

    x = rx
    y = 0
    xx = ry * ry * (1 - 2 * rx)
    yy = rx * rx

    e = 0
    sx = b * rx
    sy = 0

    Do While sx >= sy
        Line (x0 - x, y0 + y)-(x0 + x, y0 + y), c, BF
        Line (x0 - x, y0 - y)-(x0 + x, y0 - y), c, BF

        y = y + 1
        sy = sy + a
        e = e + yy
        yy = yy + a

        If 2 * e + xx > 0 Then
            x = x - 1
            sx = sx - b
            e = e + xx
            xx = xx + b
        End If
    Loop

    x = 0
    y = ry
    xx = rx * ry
    yy = rx * rx * (1 - 2 * ry)

    e = 0
    sx = 0
    sy = a * ry

    Do While sx <= sy
        Line (x0 - x, y0 - y)-(x0 + x, y0 - y), c, BF
        Line (x0 - x, y0 + y)-(x0 + x, y0 + y), c, BF

        x = x + 1
        sx = sx + b
        e = e + xx
        xx = xx + b

        If 2 * e + yy > 0 Then
            y = y - 1
            sy = sy - a
            e = e + yy
            yy = yy + a
        End If
    Loop
End Sub

Also changed your way of mouse polling to single line loop to update mouse position and buttons.
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Christmas Screen Saver (Hardware Accelerated) dcoterel 2 329 12-27-2025, 06:25 PM
Last Post: bplus
  Super Plasmas screen saver Dav 15 1,215 11-13-2025, 12:42 PM
Last Post: Dav
  Alien Eyes Using PSET SierraKen 3 795 04-29-2025, 08:03 PM
Last Post: SierraKen
  aquascape screen saver ver1.1 kn0ne 0 567 04-23-2024, 10:20 PM
Last Post: kn0ne
  These tired old eyes... OldMoses 10 2,610 04-01-2024, 03:08 PM
Last Post: Steffan-68

Forum Jump:


Users browsing this thread: