flying(6)
NAME
flying - pool/snooker/carrom/hockey/curling simulator
SYNOPSIS
flying [-options ...]
DESCRIPTION
flying was actually meant to be a test program to imple-
ment some classes to control flying objects on the screen.
After the classes were implemented there was the need of
some real tests and a game of billard was just the first
idea. By now, many subgame-classes are already more or
less completely defined. They can either be selected by
the options or by making a link to the original with a
special name. Unfortunately having so many subclasses
means that the classes themselves can't be too compli-
cated. (There's just too less time in the world :( )
Therefore the games don't have any rules yet. This means
you have to play fair and watch your opponent.
Anyway, the main thing was animation and controlling and
that works fine, especially with the -deluxe version of
pool-billard. Since the main intention was to get an
excellent billard game, I will mainly describe the pool-
version in the following pages. The other subgames are
similar to control (and there are no special rules any-
way).
STATUS
The flying package contains many subgames, that are more
or less in an experimental stage. Here is a tiny summary
of version 6
Pool, Snooker, Cannon
As already mentioned above, pool is the most comprehensive
subgame, especially due to the deluxe version. It is very
playable even though spin is not implemented. Rules will
have to be added in later revision.
Carrom
Very similar to pool, just with another background (and
more friction)
Hockey
experimental air-hockey implementation (see option -in2 to
set the display for the input-pointer for the second
player), which is worth looking at because of the uncon-
ventional control mechanism. The players have to select
one of the big discs before they can play.
Curling
experimental curling implementation, which is even more
worth to look at because of the control: Hold the left
button to take one curl. Move it in the right direction
and let it go...
CONTROLS
The pointer (or pointers) run fully simultaenously and are
like the hand of the players. At every time it's possible
to pick one of the objects to select it as the cue-object
(It should better be the cueball, if you don't want to
lose some friends). After you have aimed in the desired
direction there are 2 ways to play the ball:
easy: Press and hold down the left button to increase
the strength of your shot. Release the button
to shoot. There is a maximum power! If you hold
down the button too long, you will just make a
very poor shot as a penalty.
tricky: You might notice on that the queue stays on the
table for a moment. This is a problem, if you
are very close to the cushion. Then, the cueball
might hits the queue again. Therefor you can
alternatively gather power by pressing the right
pointer button and shot by simultaenously press-
ing the left button. When you release the left
button after the shot, the queue is removed from
the table and you can therefore remove it ear-
lier.
After shooting, you can only wait and see what will hap-
pen. By the way, there actually are some tiny rules imple-
mented. The billard classes know, that cueballs shouldn't
stay in the pocket after a shot. When they are back on the
table, you can roll them to the position you like by using
the right pointer button.
By the way, if you picked the wrong ball as the cue-
object, you can get rid of it by just clicking the right
button once.
To overcome the hurdle of the mouse resolution, you can
use the middle pointer button for fine adjustments. With
that help, you can actually position the mouse in frac-
tions of pixels. To make shoting a thrill, you've got to
release the button again for shoting. (The fraction is
stored in that case)
Summary
left select cueball
introduce easy shot
pick ball from pocket
middle fine adjustment via interpixel motion
right deselect cueball
introduce tricky shot
move ball
Additional Key-Controls
SPACE reset game
Q,Esc quit game
R restart game
^L redraw screen
OPTIONS
X11
-size n window size
-root full screen (the default)
-no_override
don't use OverrideRedirect for the background win-
dow, when the -root option is used.
-no_grabs
don't grab the server, when problems with the col-
ormap occur.
-display name
the output-display (default is contents of $DIS-
PLAY)
-in1 name
name of the main display for input (default is:
same as the output display)
-in2 name
name of a second input display. If given, a second
pointer object will be installed in the program
and can be controlled by the pointer of the given
display. (The pointer will get invisible on that
display as it is grabbed anything)
As for every display connection, you have to make
sure that all displays are accessible from your
host. (by using xhost ...)
-sound a subprocess is started, which gives some clicks
when balls hit together, but the smooth motion
gets distorted in that way, at least on my work-
station.
ADDITIONAL
-deluxe a special version of the pool with animated balls
by using hundreds of precalculated pixmaps. The
construction of the pixmaps at game start is very
time consuming. Therefore the computed pixmaps are
cached in files fly*-*.dta in a special data-
directory (usually just /tmp) for reusability.
-tv since the deluxe-option is default, this can be
used to switch back to the set of TV-balls.
-ft n sets the size of the table in pool-billard to n
foot. The value should be in a range of 6 to 9
feet. If not given, the size is selected randomly,
except in the deluxe-version, where it default to
8 feet. This was done because every size would
need other pixmaps for the balls.
DEBUG
-mode n selects the update mode for the animation in the
deluxe version of pool. There are 3 (internal)
different implementations of the ball animation,
which depend on the implementation of some spe-
cific routines of the x-server. Since mode 2 is
usually the fastest one, it is turned on by
default.
-chkmode
runs a small benchmark with the available update
modes. If a mode other than the second is the
fastest on the current machine, you should use the
mode-option to select it.
-time s stop process after s seconds
-demo demonstration (without pockets). By the way, there
are some tiny meters on the bottom of the screen
(when using the full screen and the binary was
compiled with statistic features), which have the
following meanings:
rate: shows the number of cycles per second. A
cycle means the loop for doing collision
detection and recomputing the corrent
position of all objects.
moves: show the number of ball moves, that were
neccessary in one seconds. If all objects
are moving, this would be <object number>
x <rate>
offset: if shown, it tells you, how much the real
time has gone ahead of the current inter-
nal calculation time. It should never
light up during the game, except probably
at the first shot into the triangle.
-maxspeed
the collision calculation is done only in those
moments, when a collision takes place. In the
intermediate time, only the motion graphics are
updated as fast as possible. The switch disables
that intermediate calculation to get measures for
the speed of the collision calculation. (Good
combinations to check the speed of your machine
would be: -demo -maxspeed -time 10)
-presets
shows the current internal values of static vari-
ables on stdout. The values can be dynamically
altered by setting them in the file presets.txt
with the same syntax as in this output.
There are many additional debugging options, when the exe-
cutable was compiled for debugging. They are shown when no
argument or -h is given at the commandline. You can try
flying -pool -deluxe Intro (if you're lucky) to see the
some information about the pixmap-usage.
FILES
presets.txt file to overwrite internal static values
fly*-*.dta files containing the pixmaps for the ball
animation in deluxe-pool. They are created
automatically when they are missing.
SEE ALSO
X(1) xhost(1)
BUGS
As I told, this is a very uncompleted version without any
rules, but you can perfectly play billard, so why worrying
...
The friction is not exactly integrated in the computa-
tions, since that would have cost too much performance.
Instead the objects move without friction for a given
amount of time. Then their speed is re-adjusted. When the
granularity gets smaller, the friction gets more exact.
But that works against a caching-mechanism and therefore
would extremely increase computation time, if many objects
are on the table.
Spin is not implemented
There seem to be problems, when moving objects directly
with the pointer (like in hockey or curling or with the
right button in billard) when the host is not fast enough.
At least I can not use it on my 386.
There are some minor problems when drawing static parts of
the screen. Sometimes they are misplaced for 1 pixel,
e.g. there is a one pixel gap below the line representing
the pocket
There is a problem in the start-shot of carrom. Due to the
weight of the striker, the other stones might get pushed
so close together, that the collision detection will fail
and objects will overlap (or the algorithm gets stuck in a
loop, only to be escaped by entering 'q'). Sorry for that.
Usually, the program needs it's private colormap. To get a
nicer appearance, a black OverrideRedirect window is
placed above everything else when the -root option is
given. This confuses some window managers and a struggle
for the colormap begins. If anythings else fails, flying
will grab the server and installs the map on it's own ...
COPYRIGHT
Copyright 1995, Helmut Hoenig, Mettmann/Bad Camberg
email (for any comments):
Helmut.Hoenig@hub.de
smail (for gifts):
Helmut Hoenig
Hopfenstrasse 8a
65520 Bad Camberg
GERMANY
********************************************************
By the way, I am collecting banknotes! If you want
to join into my collection, get any bill of your
country, sign it on the backside and send it to me
so I will pin it on my world map.
(Don't forget the exact location for the pin :-)
But you can also just send me a picture postcard ...
********************************************************
Permission to use, copy, modify, and distribute this soft-
ware for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all
copies.