Depot Games: ChromaPlas
#5 during April 2006
Links: Web Site
Developers: Andrei Ellman
ChromaPlas is a demo / screensaver that takes the old-skool demo plasma-effect and applies the plasma to various channels of images in different colour-spaces. The result is a psychedelic looking swirl that resembles the image. It started off as little experiment into applying plasmas to colour-space components and grew into a fully-fledged project. As far as screensavers go, it is a somewhat trippy screensaver. Chromaplas has many settings giving you the ultimate in tweaking power.
There are many different ways of enjoying ChromaPlas. When using it as a screensaver, you may set it to grab the desktop image and apply the plasma to it. If you've been staring at your screen too long, it will at first look like either there's something wrong with the monitor, or there's something wrong with your head - until you remember it's the ChromaPlas Screensaver. As well as the desktop image, any picture in JPEG, PNG, BMP, LBM, TGA, PCX format may be used. The program even has a built-in image that can be used to best experience what the different effects can do. And of course, you may view the plasma on it's own so you can see the plasma in it's naked plasma-ness. By adding a funky palette effect to the plasma, it looks ... erm ... funky.
What ChromaPlas does is to split the image into it's component channels with respect to a chosen colour-space. Then, it creates a greyscale plasma and adds the plasma value (which can be either positive or negative) to the chosen colour-space channels of the image. There are 3 colour spaces supported by ChromaPlas: RGB, HSV, and HLS. RGB just splits the image into it's Red, Green, and Blue channels. <a href="http://en.wikipedia.org/wiki/HSL_and_HSV">HSV and HLS</a> are the more interesting colour-spaces...
As well as pre-compiled versions, the sourcecode for Allegro 4.x is also available to download, so you can compile it for any platform that Allegro has been ported to (requires Allegro 4.2 or above (does not work with Allegro 5.x)). Currently, only the Windows version is a screensaver.
The faster the PC, the better the framerate and the higher the resolution possible at a given framerate. To get a better framerate on slower machines, instead of using the image / desktop resolution, use a custom resolution, and decrease the resolution to get the program to run at a higher framerate.
• Screen updating is now synched to the monitor's refresh rate (if known) instead of a 60Hz timer (if unknown a 60hz timer is still used).
• Added support for other colour-depths. Can now render using 8, 15, 16, 24 and 32 bit graphics (both as source and destination).
• Got the desktop-wallpaper mode to work (but only on Windows).
• Can now render plasmas without an image in truecolour-modes using a colour lookup table. This enables things like the funky palette effect to be done in truecolour modes.
• Can now apply a custom palette to the plasma - even in truecolour modes. To use one, load an image with a palette and the palette will be applied.
• New settings: The full lissajous-paramaters (amplitude, frequency and initial phase) for both dimensions of the moving plasma-circles can now be specified. See 'PlasmaLissajous000Settings' etc. in the INI file (the frequency-component replaces the 'Ellipse__Speed' settings in previous versions).
• New settings: Funky palette effect: As well as frequency, each colour-space-stimulation-wave has three new user-settable paramaters: Amplitude, initial-phase and wave-number. See 'PlasmaColourSpaceStimulationWave0Settings' etc. in the INI file (the frequency-component replaces the 'ColourCircle_Speed' settings in previous versions).
• New setting: Added the 'FunkyPaletteEffectColourSpace' setting. Now you can choose which colour-space the funky-palette effect will work in (in previous versions, the RGB-space was used).
• New setting: Full intensity wraparound ('FullIntensityWrap'). This is useful if the paramater to be affected by the plasma is cyclic (eg. hue).
• New setting: Intensity Rise Time ('IntensityRiseTime'). The intensity is gradually increased from 0 to the value of the intensity-setting. This lasts for the intensity rise time (in seconds). It is recommended to use this when using the desktop as the image in screensaver-mode.
• New setting: 'GlobalPlasmaSpeed' that multiplies plasma-params (not plasmacolour params).
• New setting: "If image is smaller than screen, expand plasma to fill screen" ('ExpandPlasmaToFillScreen').
• New setting: "Confine everything to square of smallest screen-dimension" ('ConfineEverythingToSquare').
• New setting: "Confine lissajousses to square of smallest plasma-dimension" ('ConfineLissajoussesToSquare').
• New setting: 'AlwaysUseColourLookupTableForRawPlasmaInTrueColourModes'. When using plasmas without an image, if set to 1, this will always render in truecolour modes using a colour-lookup table. Otherwise, raw plasmas (when there's no image or palette effects) will be rendered without the use of colour lookup tables. In most cases, it is recommended to set this to '1'.
• Added the setting 'settingsname' so we can tell which INI file is being used. This is useful if we're not sure where the program will search for the INI file, and also lets us name the settings in individual INI files.
• Changed settings: All frequencies are now in cycles per second (instead of radians per 1/60th second).
• Changed setting: Replaced the 'VerticalRetraceSync' setting with Allegro's 'disable_vsync' setting (the on-ness has been inverted, so enabling 'VerticalRetraceSync' is the same as disabling 'disable_vsync'). The setting has been removed from the Windows Screensaver dialog but at least it should now affect page-flipped modes as well.
• Settings dialog (Windows SS): Implemented test-mode. Just press the "Test" button in the dialog.
• Settings dialog (Windows SS): Added a "Restore defaults" button that restores the settings to their default values (this overwrites the current values in the INI file).
• Settings dialog (Windows SS): Got the BPP selection box to work, and 'ImageCustomBPP' now works.
• Added support for PNG format images.
• Implemented triple-buffering rendering mode (but currently changing the palette in 8-bit modes produces shearing when using triple-buffering). Set 'RenderingType' to 4.
• Builds the built-in image quicker.
• When setting up the image, the app is more responsive to commands to exit the app.
• Statistics display now displays the monitor's refresh-rate and the Allegro graphics-driver ID, the settings-name and a few other things.
• Now plays nicer with the CPU.
• Now obeys app-close messages. This means if the operating-system tries to close the app, it will succeed.
• Windows version can now also be compiled as a regular EXE (ie. not a screensaver).
• Windows SS: Implemented the Screensaver Password setting.
• Windows SS: If the setting 'UseIdlePriorityClass' is set, sets the process-priority to IDLE_PRIORITY_CLASS
• Sourcecode: Moved obj.*/ directories to the obj/ directory (and obj.unix renamed to obj.unx).
• bugfix: The Red and Blue of the builtin image would sometimes get swapped.
• bugfix: Fixed page-flipping on DOS and Unix-based platforms.
• bugfix: Windows SS: When running the Windows SS in preview-mode, The preview-window plasma-speed is synched to the actual plasma speed.
Overall Rating: 9.0
8Looks absolutely marvellous! The more colorful the image used, the better it looks.
10Im not one for screen savers, but this is a really cool prog. And its the first plasma demo that ive managed to find the source to(well, maybe i havnt been looking to hard) so bonus points.
8I've always been curious as to how the lava-lamp effect has been achieved for plug-ins etc. A little user-friendly configuration menu would be nice, but since this is only a beta I suspect you probably have something in your plan. I'll be eager to download the finished version. Very nice!
My origins are as follows: I was assembled from spare parts found at the local graveyard by my parents in an overzealous attempt to create a prototype for my sister.
Until recently, I was a programmer at Digi-Guys in Ealing, London working as a tools/support programmer on a hybrid game/film project.
I am also a keen hobyist programmer. In fact, I once quit my job in the computer games industry so I'd have the time to write my own game - go figure.
Before that, I had previously had two full-time programming jobs in the computer games industry. One at Criterion and one at Runecraft.