XScreenSaver 5.39

XScreenSaver 5.39 is out now, including iOS and Android.

Four new hacks this time! Three by me.

For RazzleDazzle, I spent a lot of time looking at historical dazzle paint-jobs to try and get a sense of whether there was some basic algorithm under the technique, and came to the conclusion of, "no". Most of it seems to be, "you know it when you see it", but I didn't discern any simple universal rules about the underlying mesh. But, taking a grid and doing a random-walk on each node in it, with some constraints that they try to avoid passing each other, seemed to get the basic sense of it. Even though the pattern is fundamentally rectangular, after a few iterations a lot of sharp triangles show up anyway.

The infinite scroll effect is achieved by running the grid on a torus that is twice the size of the screen, so by the time you see that piece a second time, those points have moved. For the ship stencils, I just traced some old photos by hand.

Fun fact about Peepers: eyeballs are a really funny shape! The iris is kind of a smooshed torus, and is concave-ish compared to the sphere, while the lens is highly convex. But, from many angles the iris actually looks convex because of the diffraction of the lens. So it's hard to get this right in OpenGL, which doesn't do ray tracing. I think a little transparency kind-of got the job done, though. Inspired by PaintYourDragon's Adafruit Snake Eyes Raspberry Pi Bonnet, obviously. And as seen in Cyclopian glory in DNA Pizza.

On X11, try it as "peepers -mode xeyes -count 2" or "-mode beholder"

Crumbler is ok, but I had hoped for more complex shapes. Possibly those would emerge at higher resolutions and number of subdivisions, but the convex hull library that I grabbed is not ideal; it does a O(n^2) malloc at startup, and is kind of slow on top of that. Oh well. If you know of a small, fast quickhull in C, lemme know. I didn't feel like writing my own.

I'm told that the maze thing will be nostalgic for certain people who led childhoods of tragic deprivation, desktop-wise. My thoughts and prayers are with you.


Things work a lot better on Mac Retina displays (since I have one now). Turns out a lot of the older screen savers made crazy assumptions like "a single pixel is a thing that you can actually see".

Loading images from RSS feeds works more better, and Android is able to load images from your photo roll.

And on X11, fonts will hopefully look OK on your shitty-assed Linux distro that doesn't ship exotic, avant garde fonts like Helvetica by default, which is apparently a lot of them. Basically as soon as it fails to load a font, it goes scorched-earth and tries like a thousand different things until something works. Fuck it.

Also, internally I converted all of the image assets from XPM to PNG, because what year is it? This means several things have better color and better alpha, but mostly it's just less weird and bloated. But it probably makes some things display incorrectly on 8-bit pseudocolor displays, about which I have decided to just not care.

Previously, previously, previously, previously, previously.

Tags: , , , , , , , , ,

13 Responses:

  1. Jon Ault says:

    I remember playing a maze game on the Commodore VIC-20 I had in college (the code typed in from a magazine). It didn't have the inversion mechanic, but the ceiling would slowly collapse as you tried to find your way out.

    So a bit nostalgic, yes.

  2. Crasher says:

    iPhone 7 plus, iOS 11.3, Crumbler crashes app when attempting to run.

    Haven't seen any other crashes anywhere.

    • dz-015 says:

      Crumbler always crashes for me on iPhone 6 (iOS 11.2.6). I don’t have XCode set up so I don’t know the actual error message.

  3. Crasher says:

    Update to say same crash on iPad 2017 model.

  4. o.o says:

    "There is only so much up with which I will put."

  5. db48x says:

    The dazzle effect is quite nice; I like that you shift the pattern over time. I think it would be improved by antialiasing though.

    • jwz says:

      I think that depends on your GPU. Under both X11 and Cocoa all of the hacks try to create an OpenGL context with multisampling if possible.

    • db48x says:

      I went poking around in the source to see how hard this was to add, and of course it's already there. In principle, it can be enabled with an X resource (razzledazzle.multisample: on, or *multisample: on to get them all), but that still didn't work for me. After some guesses and a small hack I've gotten it to work. I'll send you a patch.

  6. benc says:

    On OSX 10.11.6 I am getting the error:
    Unapproved caller.
    SecurityAgent may only be invoked by Apple software.
    This happens if run by auto-update, install by DMG, or sudo -Hs then mount the dmg and try and install.

    You CA is correct, and the signing all appears good though.

    • jwz says:

      Well that's a new one to me. Some googling suggests that this is an artifact of an upgrade gone wrong. Also.

      • benc says:

        Well look at that, there's a security patch it downloaded in the background, and wants me to install by rebooting.

        I swear we peaked around 10.5/10.6.

        /me misses uptimes measured in months or years &lt/been_at_this_a_while&gt

        I rsync'ed *.saver over already, so the actual install is just to keep the versioning happy. Thanks for all your contributions and keeping this going, your addition of new savers and android support.

  7. John says:

    What library are you using for convex hull?

  8. Carlos says:

    I have the same problem (with Crumbler) in my 2017 IPad.

  • Previously