Run the executable flag.exe from the directory with the textures (cursor.sgi and cloth5a.sgi).
The object of the game is to 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.
Your robots are greenish; the computer's are reddish.
Upon one side's victory, the winner's home base cone will become much larger.
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 continue on their post-collision trajectories.
Robots that are about to collide will halt a small distance from each other.
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 quadratic 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.
Last modified 24 December 2013