Contents
1.Introduction/Purpose
2.Basic Usage
2.1 Getting started
2.2 Menu Commands
2.3 Option Settings
3.Effects/commands table
4.History
5.Plans/Future/Missing Things
Contacting the author
1.Introduction/Purpose
As I've seen Cthugha the
first time, I was fascinated by the everchanging patterns on screen and
the influence of the music on the graphical patterns. With the addition
of mixing pre-loaded images into the graphical output it even became a
bit like the video clips we know from TV. But here also the main fault
of the program got obvious: pure randomness becomes boring with the time,
even if there's no repetition. So now with BUZZ it should be possible to
add creativity again and allow to control graphical output equally as the
music is controlled by the BUZZ patterns.
I intended to do a complete Cthugha port as a start, but because I'm too lazy (or too busy) for this, I started my machine from scratch, and hope it's nonetheless useful already in the present state: as image viewer for slide-show like things without many graphical effects yet. I based it on DirectDraw for better performance, but had some problems with the fullscreen-modes, which strangely seem to influence the sound output quality of BUZZ, so in the moment it's windowed only, and all those fine palette animating tricks of Cthugha will be impossible (or only much harder?).
For image storage I had the options of always loading them as bitmaps, so they would have to be bundled with the song, or to store them as "wave" with the song, which I prefered. But this way the songs may become very big: I don't use any compression yet and storing a 320x200 bitmap with 24bits color already needs 200k, paletted images on the other hand don't work perfect yet. The images are stored temporary in a file buzztemp.bmp, which may be left behind on your HD. You can savely delete this one (or use it as image-rip until I add an "image save" feature)
Most implemented blit effects are just an interface to the DDraw blit
routines, so they may depend on the graphic card and driver, because not
everything will be emulated by DDraw. So unfortunately the screen output
may vary from PC to PC :(
2.Basic Usage
The machine is an effect machine designed to allow receiving
of sound input, so you have to put the DLL into the Gear/Effects
directory. You have to connect input and output and some sound has to
come in, otherwise it won't be activated by BUZZ (at least for some
of the vGraphity modes, so better always care). It's output is pure silence,
so it shouldn't change the sound of the song anyway (beside from artefacts
due to higher CPU usage).
You can have more than one vGraphity machine in the song, all accessing
the same output window, but you should connect them parallel or set the
"sound through" option in all but the last machine (because otherwise
there will be no input sound, which may prevent the machine from working
as expected). Also with more than one machine the order of processing them
may be of importance (for instance erasing the screen with one machine
and drawing something with another), but I have no influence here: it seems
to be always the order the machine were created. Maybe I can add some reorder
option to m2buzz if this seems to be necessary here. All coordinates, zoom
factors and colors, which are remembered by the machine, are independent
for every machine. But the basic modes (resizable/fixed window) are the
same for all.
2.1 Getting Started
You have to decide between one of two modes: either a resizable window
(default, compatible to vGraphity 0.11), where you can access windows of
any size (that is less than 0x2000 ;) and have some extra (graphic card
dependent) blit modes, but none of the (growing number of) image processing
effects you get in the other mode: fixed window size (320x200 recommended
because of performance reasons), switchable to fullscreen mode (right mouseclick).
Against my primary plans 16Bit color mode is prefered in the moment
(mainly because windowed and fullscreen mode are the same here): be aware
that a lot of the effects won't work for less or more colors.
Look at the demo song or just load some bitmaps from the machine menu.
Some explanations about the single columns are given in the following table:
column | explanations/remarks |
wave slot number | If you put a number here, anything you loaded with the machine into
BUZZ may be used: bitmaps, text files or translation tables.
Using zero as wave number deletes the complete window contents
and fills it with the given RGB color
bitmaps:Set the wave number where a bitmap is stored in the waveslot
column and it should be displayed (with the left top corner at the specified
X and Y coordinates). For scaling use the effects 0x0006,0x0007 or 0x0008.
If at least one of the RGB columns contains a number, the given color will
be used as source transparency key, that is: this color will become transparent.
text files: After loading any standard text file, you can show the first line of text by giving the corresponding wavenumber here. The actual color and coordinates are used. Set the text height with the command 0x0061 and change the text line number with 0x0062. translation tables: You can also load translation tables from DOS-Cthugha or Cthugha97 (not from Cthugha for Winamp or some Linux Cthugha versions; a table has to be exactly 130,560 bytes). These tables allow a lot of nice effects for the 320x200 fixed window mode: they just give the source point for every pixel after the transformation, there also exist several programs to create these tables. Just use the wave number where you stored the table, and the transformation will be done. This column is always processed behind the others (that is all effects, coordinates, colors already apply here), so if I ever make a new incompatible version, this column will become the rightmost. |
X/Y coordinates | You can set the coordinates in different ways:
a) absolute coordinates: 0...0x2000 ->positive values (0x2000=8192, should be large enough) 0x2001...0x4000 ->negative values (-0x1fff...0) b) relative coordinates: 0x4001...0x4800 ->dx=1...0x800 0x4801...0x4fff ->dx=-0x7ff...-1 The actual values will be remembered by the machine (comon for all tracks!) and used in case there's no coordinate given, for the relative coordinates or for commands needing two coordinates (line drawing). Exception is the "line to" command, where the older coordinates of the starting point are remembered instead. |
Red/Gree/Blue | In most cases you simply set an RGB color here. This color is used
for several commands: erase window, color fill, pixels, lines or as transparency
color for bitmap blitting,...
To have an additional value for the default dots ("..") I've always mapped the maximal value of 0xfe to become 0xff. (In 16bit color mode there is no difference: only 5 or 6 bits are used for one color component, so 0xfe or 0xff give the same color). Some commands (0x0110...0x0113) use these columns for color shifts with a different format. The color values aren't remembered in these cases. |
Effect/Effect data | look into the effects table |
Most intern variables (X,Y,Red,Green,Blue, X and Y zoom factors,...) are common for all tracks (in one machine), this way you can set X and Y coordinates in the first track and use them as start values for a line in the second track. It should/will also be possible to accumulate effects to apply at once for one image this way. On the other hand this complicates some things (like doing 2 independent things at once, but this is possible with using several machines) and may give a lot of tracks.
2.2 Menu Commands
Open Window/Refresh: Here you open the window for the graphical
output. If it's already open, only the images in memory are synchronized
with those stored in the wavetable section. This is necessary to actually
delete an image from memory you deleted from the wavetable (and even more
after deleting a text file or translation table: BUZZ will crash if you
try to use a deleted table and I have no idea how to prevent this).
Load Bitmap/Text/Translation table: You can load any standard bitmap here, but non-paletted ones are recommended. They are stored in the wavetable section of BUZZ (in the first available free wave slot)and additionally loaded into an offscreen DirectDraw surface. Additionally you can load translation tables from DOS-Cthugha (have to be exactly 130,560 bytes) or standard text files.
Options: see below
2.3. Options
There are 2 groups of options: global options, which apply to all machines
in the song, and machine specific options. For most options to take effect
you have to close and re-open the graphics window.
Global options:
Machine specific options:
Setting effects data without an effect is equivalent to effect 0x0006
(zoom X and Y), this may be useful for MIDI input ;)
version 0.11:
-working colorfill (effect 0x0003)
-erase window uses DirectDraw colorfill now (slight incompatible:
uses given color now, so just add RGB 0,0,0 to all old erase window commands!),
this is also in sync with other bitmap commands
-circle airbrush (effect 0x0021)
-source transparency with given color (only if at least one of the
RGB columns actually contains a number)
-negative x,y coordinates 0x2001...0x4000 -> -0x1fff....0
-color RGB value mapping 0xfe -> 0xff
-more bitmaps in one row work correctly now
-window initialized now a bit away from top left desktop corner
-show first available image at startup
version 0.2
-begin handling of DDraw fullscreen mode(s): switch with right
mouse click; take care: they can mess up your desktop icons :(
-offscreen buffering for effects -> only 320x200 seems useful
(at least on my P200)
-aaahhh: version 0.11 was already able to hande multiple machines
accessing one window; refined this a bit
-added first effects, quite nice and really fast enough :) (at 320x200)
-> instead of doing the 8bit modes I'll probably stay in 16bit now
-now it really becomes multi-layered: added option for single
machines, to keep blitting directly to the screen, while others
do the offscreen buffering, this is very cool for animations
-instead of having to force a special machine order for the previous
point (obviously the direct screen blit has to occur after
the offscreen to screen blit) -> some code wandered into the Work()
function: that's why the machine input has to be active again for
the new modes
-added fixed window size option
-added options dialog + saving/loading of settings
-VERY BASIC text interface: draw one character (per ASCII code) with
given size and color at given positions (ARIAL font), ... will the
text processing software of the future be like this...
-saving of last window size with the song and using this for creating
the resizable window instead of the deafult 320x200
-F5/F8 can now also be pressed in the vGraphity window (especially
usefull for fullscreen modes)
-loading and using DOS-Cthugha translation tables (for 320x200 fixed
window mode)
-loading text-files, but what command interface to use for them ?
-relative coordinates 0x4001...0x5000 (very useful for text scrolling)
-sound through option (to allow putting several vGraphity machines
in a row)
-MIDI input ;)
-default effect (if only data is set) -> 0x0006 (may be better for
MIDI controlling)
-disabling graphics output for anything other than BUZZ or m2buzz
-handling of multiline textfiles
version 0.21
-some fixes for newer BUZZ 1.2 betas, loading of bitmaps caused crashes;
now bitmap loading is delayed 3 seconds,
and you may need to explicitely use the menu command "Refresh
Bitmaps"; there are still some sound problems though : (
-added wave slot offset and periodicity for MIDI input
-JPG loading
-temporary files are now created in usual temp-directory and deleted
after usage -> no buzztemp.bmp files anymore and loading files from CD-ROM
possible