Chris Unkel

Capture the Dodge Ball / Windows

Run process:
Run the executable from the directory with the textures (cursor.sgi and
cloth5a.sgi)--or run it from inside.


Game play:

Object: collect more than half of the black balls in close proximity to your
home base (indicated by a small green cone) before the computer collects more
than half the black balls in close proximity to its base.  Defend yourself and
attack your opponent with a multitude of dodge balls.

Details:
Your robots are greenish; the computer's are reddish.

The winner's home base cone will become much larger.  The cones are not game
play objects.

If a ball (moving with sufficient speed) strikes a robot carrying a ball,
the robot will stop and drop the ball (which maintains position and velocity
but starts to fall).  If a ball strikes a ball being carried by a robot, the
robot continues, but no longer holds the ball, and the balls normally.

Robots that are about to collide will halt (somewhat before they actually do.)


Controls:

Camera:
  Top/bottom/left/right of screen: pan forward/backward/left/right.
  Upper right/left corners: rotate camera direction to right/left around the
    point under the camera.
  Lower right/left corners: rotate the camera the the right/left around
    the point on the ground that intersects the central ray.

Play control:
  Left-click on a robot to select it.

  With a robot that is not carrying a ball, right clicking on a sufficiently
    close ball picks it up.  Right clicking any other object or on the ground
    makes the robot move to that point.

  With a robot that is carrying a ball, right clicking on another object (ball
    or robot) will throw the ball towards the object.  A ball may only be thrown
    so fast, so if the object is far away the ball may bounce and miss, or
    stop short.  The maximum velocity is relative to the robot's motion, so you
    can throw balls faster in the direction you're moving.  Right-clicking the
    ground will move the robot there.


Option keys:
  1 to toggle a demonstration of the backbuffer technique used for selection.
  2 to toggle a small indicator of the intersection of the central ray and
    the ground.
  3 to toggle computer AI (well--AS) control of your robots (initially off).
  4 to toggle computer AI control of its own robots (initially on).


Advanced features:
The game contains an advanced analytic collision prediction and physics model.

The collision detection is dynamic (predicts collision time rather than
time stepping) and analytic (predicts collisions of spheres and cylinders, not
polygon meshes).  The position of all objects in the game is described as a
quadratic function of time, although only the y dimension can have a quadratic
component, which describes the parabolic motion of a ball in flight.

To predict the time of collision, the collision detection engine solves
polynomial equations.  Although in general detecting intersections between
quadric objects, such as spheres and cylinder, that are moving in potentially
quatratic paths involves finding the roots of a 4th degree polynomial, the
engine makes use of knowledge about the relative motion and structure of the
shapes in the game so that it solves mostly 2nd degree polynomials.  Only the
intersection time of a ball in the air with a sphere at vertical rest need be
found with a quartic equation (this is the case for a ball in the air and one
on the ground, or a ball in the air and the top of one of the robots.

The collision detection only runs when some object's position as a function
of time has changed--if no objects collide (and no robot is controlled) the
collision detection engine does no work.

Having detected a collision, the game models it in a physically accurate
fashion.  Collisions between balls are modelled as fully elastic collisions
between non-deforming objects of equal mass.  Collisions between balls and
robots are fully elastic and as if the robot had infinte mass.  Collisions
between the balls and the ground are somewhat inelastic, removing a fraction
of the velocity, as well as a fixed amount of velocity, which allows the balls
to come to perfect rest.



The game also has a control panel in the form of a radar screen.



The ground texture came from 3d Total Textures (http://www.3dtotal.com/).
The routines for finding the roots of polynomials are from Graphics Gems.
Routines for loading textures are from the class directory.
The camera control mechanism is patterned that in Bungie Software's Myth II.