Contents
Juggle Screen Saver v0.21

Juggle Saver is an accurate 3D simulation of juggling patterns using site-swaps, that can act as a Windows 95/NT screensaver.  The motion and the rendering of the graphics is all performed in real-time.  Running on a Pentium 90, the animation is respectable, it is possible, by tweaking the options to achieve acceptable performance on a 486DX66.

The juggling program can generate random sites of adjustable complexity, read in predefined juggling patterns from disk or use a combination of the two (registered version only).  It is also possible to specify which objects are juggled, from a combination of balls, rings and clubs (registered version only).  While the screensaver is running it is possible to slow down the animation and adjust the camera viewport.

Dynamic Viewing

Customising

Registering

Creating Patterns

Other Information

This program is shareware, feel free to distribute the unregistered version.  Registration is only £5.00 (UK pounds) and will remove the nag message, allow clubs and rings to be juggled and allow customised site-swaps to be created and viewed.  To give an impression of the features available in the registered version, a registered pattern is juggled when the screen saver first starts.

Please seek the author's permission before placing this program on a world wide web page, bulletin board, shareware CD compilation, magazine cover-disk or any medium that allows mass distribution.

©Brian Apps - January 1997
email: b.apps@bath.ac.uk


Dynamic Viewing

While the screensaver is running it is possible to perform a number of dynamic adjustments:

The Page Down key automatically advances to the next site swap pattern.

Pressing and holding the Alt key will slow the animation rate to half the normal speed.

Pressing and holding the Control key allows the camera to be dynamically adjusted.  While the control key is down, press and hold the left-hand mouse button and drag the mouse to move the camera position.

Note these keys do not work when the screen saver is running normally (not via the preview button) on NT.  For security reasons, NT runs screen savers in a separate desktop and does not allow user input.


What is a site swap
A site swap is a mathematical way of describing throws in a juggling pattern.  The string of numbers represents the amount of time alternate ball throws remain in the air.


Customising Juggle Saver

Context sensitive help is available for all items in the customisation dialog.  Use the context sensitive help button (the question mark in the top right corner) or press F1 to gain access to this feature.

Tips on configuration:

The effects of tweaking the configuration options is very dependant of computer hardware and configuration.  In general you should aim to have the screen size parameter as large as possible while still maintaining a good frame rate (around 15-25 fps).  On systems running at high resolutions with high colour depths (eg. 1024x768x16bit), the screen size parameter will need to be reduced more.  Generally speaking there is little visual difference between true-colour (24-bit) and high-colour (16-bit) but the impact true-colour has on performance is huge, so it probably best to switch to 16 bit (this applies to all applications).


Creating Custom Patterns

The registered version of Juggle Saver v0.2 allows juggling patterns to be stored and replayed using a text file.  The method of creation is not particularly straight forward, it is intended that a separate program will simplify the method of site entry and creation.

The file used to read in sites is specified in the configuration dialog.  An example file is included with Juggle Saver that contains around 25 patterns.  It is a good idea to take a quick at these patterns before creating your own.

Each pattern consists of the following parts: an optional description, a number of throw descriptions and a terminating semicolon.

The description should appear at the start of each pattern, if no description is supplied Juggle Saver will create one based on the throw weights used in the pattern.  The description is a text string enclosed between double quotes (").

Following the description, a number of throws are given.  Each throw consists of a throw weight followed optionally by: an object modifier, a position modifier, a snatch modifier and a spin modifier.

The weight of the throw should be given as a single number. For throw weights greater then ten use the letter ‘A’ onwards.  The juggler always starts with its right hand (viewer's left side when looking face on)

Following the throw weight should follow the object modifier.  A single letter (case insensitive) is used to donate: B - Ball, R - Ring, C - Club.  If no object is specified the default action is to use a ball.

The position from which balls are thrown and where they are thrown to can be modified with the @ and > characters respectively.  These positions should be specified as x, y, rotation, elevation co-ordinates, enclosed in round brackets.  The diagrams below shows the x-y co-ordinates with the approximate arm reach of the juggler, and the interpretation of rotation and elevation.  If no position modifiers are used, Juggle Saver will generate positions based on which hand is throwing and whether the throw is of even or odd weight (ie. if it is a crossing throw).  Rotation and elevation are only used for clubs and rings, if this values aren't given defaults will be generated.

The juggler can be made to snatch a caught object by using the snatch modifier /.  A pair of co-ordinates should follow this modifier and should be enclosed in round brackets.  This co-ordinates describes a vector that gives the direction and speed of the snatch.  If no snatch modifier is given, Juggle Saver will ensure that the hand matches the speed and acceleration of the ball as it is caught and thrown.  Experimentation is necessary to achieve good results with snatched catches. In general the length of any snatch vector should be no more than 20.

Finally the number of spins a club is given can be specified using *n.  Where n is the number of spins.

The following example shows how to describe the 'chops' pattern

$ all comments begin with a $ and extend to the end of the line

"Chops" $ pattern description

3@(2,0.5)>(1.5,4)/(-6,-12) $ first throw with snatch

3@(-2,0.5)>(-1.5,4)/(6,-12); $ this semicolon at the end is critical

When creating new patterns it is recommend that they are created on a one-by-one basis.  This way Juggle Saver will always play the patterns being developed, since it's the only one in the file, and any problems with the pattern can be easily isolated.  Juggle Saver gives no error messages when reading patterns.  The decision to do this is based on the grounds that the program is a screensaver and not an application; although it is not impossible that improved error handling will be included in future versions if development of the stand-alone simulator takes longer to write than expected.

I'd love to see any new custom patterns that you create, and I'd very much like to incorporate these into the next version of the program.


Registering Juggle Saver

If you like Juggle Saver please register your copy by sending £5.00 (UK pounds) to:

Brian Apps
6 Berkeley Court
Bathwick Hill
Bath
BA2 6EY
England

It is probably easiest to send this as a bank note if you live outside the UK. Inside the UK send a cheque made payable to B Apps.  US users can send $10 in cash as an alternative payment.

When you register I will send you a key-code to unlock the screen saver which will remove the nag message, allow clubs and rings to be juggled (this is well worth registering for) and will give access to site customisation options.  This code will be valid for the next major release of Juggle Saver and probably all versions after that.

This is my first piece of shareware software.  Development of this program and of future programs depends on your support.


Other Information

Further Developments

A number of improvements and additions are planned for this program, many of these ideas come as a direct result of suggestions received on the first beta version of the program.  In fact this is the same to-do list from version 0.11 so don't expect these features to appear too quickly:

Ball Editor - A means to customise the material properties and colours of balls is planned for the near future.

View Angles - Options to change the way the model is viewed, possible inclusions: fly-bys, first-person views, distorted perspective etc.

Direct3D - OpenGL is used generate the graphics, I am currently investigating the use of Direct3D.  This has the potential of providing a standard interface for hardware acceleration.  At the time of writing hardware acceleration for OpenGL is only really seen on high end CAD systems.  One of the motivations of distributing this program is to gain enough cash to buy a 3D graphics card.  The use of Direct3D could depend on how many people register so please send me your cash.

Stand Alone - The underlying code can function as a standard Windows application.  Incorporating the graphics engine into an editing interface will allow juggle patterns to be examined and created.

Site Swap Engine Improvements - It is not impossible, though it would require considerable rewriting, for a more advanced site swap simulator to be used.  This would allow more complicated juggling patterns to be simulated including: multiplex (simultaneous throw) patterns, bounce patterns and ultimately the ability to simulate passing (multiple people).

Ball Drops - The computer is just too damn good at juggling, I’m contemplating putting in code to make the juggler drop one occasionally.

Network Juggling - This is one of the most wacky suggestions I received (thanks Stuart).  In theory it would be possible to detect if two computers are running Juggle Saver on a network at the same time.  Some code could be included to synchronise the computers so they could pass objects across the network.

About the author

I have been using/programming computers from an earlier age.  I received my first computer, a Sinclair ZX Spectrum, as a Christmas present in 1982 and have been hooked since.

My interest in juggling also goes back to childhood although only I've been actively juggling for around six years.  I don't practice enough to get any better, but, I can juggle 5 balls acceptably (with a couple of tricks, just about) and on a good day can get a reasonable run with 4 clubs.

This is my first piece of shareware software, I am curious to find out how far the program gets distributed, so even if you don't register send me an email and tell me where you got the program from and what you think of it.

Acknowledgements

Thanks goes to all those from the rec.juggling news group who sent their comments on the beta version of Juggle Saver.  The feedback was really great, it confirmed my suspicions that I’d written a good program.  There’s too many names to mention, you know who you are.

Thanks goes to Chris Raper and Ian Lowman who were the first two people to register, both registered within days of the program first becoming shareware.  Cheers guys!

The technical comments/suggestions on screensaver programming from Lucian Wischik were invaluable in turning Juggle Saver into a proper program.

Finally thanks to family and friends who fuelled my ego, telling me how good the program was, without this I’d of lacked the conviction to make the program shareware.

Juggle Saver Home Page: http://www.bath.ac.uk/~ensba/JS/Juggle.html

email: b.apps@bath.ac.uk


Controls the number of frames used to make up each juggling beat.  Adjusting the slider speeds up to slows down the animation.


Changes the thickness of the cylinders used to build up the juggler.


Adjusts the number of facets used to draw the juggler.  Increasing the detail gives a better visual appearance but slows the animation down.


Adjusts the speed at which the camera rotates around the juggling figure.


Adjusts the size of the window the animation is rendered to.  Making the window smaller reduces the load on the CPU and increases the speed of the animation.


Checking this box will give the option for the random sites to use balls.


Checking this box will give the option for the random sites to use rings (registered version only).


Checking this box will give the option for the random sites to use a mix of balls, rings and clubs (registered version only).


Checking this box will give the option for the random sites to use clubs (registered version only).


Juggler Saver v0.2

© Brian Apps 1996-1997

The writing of juggler saver required much effort and heart-ache please register your copy.


Juggler Saver v0.2

© Brian Apps 1996-1997

Many thanks for registering your copy.


Makes all the objects in a juggling pattern the same colour.


Type the registration details in here to unlock the program and give access to the registered features.


Places a second light in the animation scene.  The light is slightly yellow and is placed behind and slightly below the juggler.


Checking this box will make the screen saver display the description of the juggling pattern or its site notation, at the bottom of the screen.


Adjusts the size of the juggling objects.


Adjusts the speed at which juggled balls spin about their own axis when thrown.


Checking this box will make the program calculate and display the animation frame rate.  Useful for seeing the effect of customisation settings.


Check this to make the juggled objects a single colour as opposed to a two-tone effect.


Adjusts the maximum length of random site swaps.


Limits the maximum throw height used to generate a random site-swap.


Sets the file used to read in custom site swaps (registered version only).


Brings up the open file dialog to locate a site swap file.


Adjusts how long before changing to a new juggling pattern.


Adjusts the mix between randomly generated site-swaps and ones read in from a custom site-swap file.


Adjusts the number of facets used to make up each juggling object.  Increasing the detail give a better visual appearance but reduces the frame rates


Use the check boxes to specify which juggling objects are used.