The game will be a cartoon-style racing game. The cartoon aspect will permeate every aspect of this game. Game will feature one-man mini-submarines racing through predefined underwater tracks. Players will have the choice of individual races or championships. In these races they will face a variety of cartoon-style villains in their own mini-subs.
Graphics will be entirely handled by 'cel-shaded' rendering. This will lend to the cartoon feel of the game and reduce the emphasis on graphic detail. Special effects will be handled in the same style. For example an explosion or crash might result in a comic-book style visual sound effect.
Characters and Submarines
The characters of the pilots of the AI-controlled subs will be exaggerated and one dimensional. Depending on the final number of characters they may be grouped into silly but consistent 'teams'. ( "Team Pirate" for example. ) In any case they will be distinct and recognizable from each other.
The Submarines would have distinct and exaggerated differences as well. Their performance characteristics will be boiled down to no more than half a dozen attributes such as "top speed" and "Acceleration". Different subs will have strengths in different areas.
The submarines will be armed with a variety (hopefully) of ridiculous weaponry. However, in true cartoon style the weapons will have no lasting effect. A direct hit will be only momentary inconvenience for the victim. Possibly momentarily throwing him off course, slowing his engines, momentarily blinding him, or something similar. Weapons will be handled so that weapon characteristics are stored as data so that they may be adjusted and added to without making changes to the program code.
The program will have two main "Modes" menu-mode and game-play mode. Game-play mode will handle only the actual submarine racing while menu-mode will handle all the set-up required to make the game happen. All the event handlers will have to be switched over whenever the program switches modes.
The landscapes that the races take place in will be chiefly comprised of height-maps. This should simulate a natural under water environment and simplify the process of creating race tracks.
'Objects' will be 3d objects within the environment. They'll interact with the renderer which will be a static object. Actual 3d model information will be stored in arrays of faces which contain arrays of 'index'es which will point to vertex objects and contain any necessary lighting and drawing information.
Quaternions will be used for all angle measurements. Objects will be assigned Quaternions to indicate their orientation and their rotational velocity. Absolute velocity will be handled with a 3d vector.
Interaction between the objects and the laws of physics will be handled by the "RaceTrack" object. All objects within the game environment will be components of this class.
Rendering will be handled by passing an array of all visible objects to the Renderer class. This is the only interaction the renderer class will have with the environment.