-=Game Design Specification=-

--Project Codename: "Privateer-Asteroids"

--General Description: As the codename might lend one to believe, this game will be a hybrid between the physics engine and gameplay concepts of the 1980s game "Asteroids" and selected concepts from Origin Entertainment's "Privateer". Players will start with a basic ship with the very basic loadout. They will then go out and, along with performing story missions to move the plot along, engage in a multitude of moneymaking and character-enhancing activities, to include but not limited to:
* Merchant Trade - Buying low and selling high of commodities from planet to planet and dock to dock.
* Piracy - Attacking merchant vessels and using a tractor beam to retrieve jettisoned cargo, to sell in dock.
* Mercenary Activity - The Lone Gun-for-hire. They will be able to pick up random missions in dock from NPCs.
* Courier/Exploration - Exploration of the world will yield advantages not attainable through trade or piracy, such as ancient alien technologies, deposits of valuable commodities, derelict spacecraft and more.

The game will run windowed on the Windows desktop, with all the controls that are part and parcel of running a DirectX app in windowed mode. The game will be rendered in 2D Isometric graphics, with sprite animations and other simple effects. Framerate will be capped on the front buffer at 60fps, but rendered every pass (~300fps+) on the back buffer. This will help monitor sync and refresh rates while windowed.

--Screen Specification:

* Menu - This screen will be rendered first as the player enters the game. This screen will feature X options, as follows:

- New Game: This option will initialize a new game for the user, including showing the opening scinematic, if any.
- Load/Save: This option will load another screen that will give the user the option of saving their progress or loading their progress from an object file.
- Options: This option will send the user to another screen where he can adjust difficulty settings, gamma, etc. (explained later)
- Credits: Roll credits animation.
- Exit: Exit the game.

* Load/Save - A list of the user's save points, which he can highlight and view a thumbnail of the save point on the right. Buttons on the bottom of the screen will provide functionality: "Save", "Load" and "Back".

* Options - This screen will hold the various options we will grant the user to control his experience in our game. A few basic options I can think of are gamma, detail levels, difficulty, mouse sensetivity and key bindings. More will probably be added as we get further in development. Buttons at the bottom of the screen will provide the functionality: "Apply", "Back", and "Default".

* Credits - This screen will scroll names involved in the development, thanks and other notes we see fit, while some animation plays in the background.

* Main Play Area - This is the main screen of the game, the screen the player will see most of all. Sans screenshot, I'll try and describe here what I'm seeing in my head. The screen will be split into three basic "levels". The topmost will be the statistical display area of the player's current condition, the middle layer will be the player's actual actor, plus enemy actors and other "moveable" objects. The bottom layer will be the background terrain, with mapped clipping layers to simulate impassible terrain.

"Stats Layer" - On the top right will be a translucent graphical representation of the player's ship. As the player's ship is damaged, the corresponding parts will turn yellow to indicate some level of damage, then red to indicate a failure. Around this graphic will be the space where the graphical representation of the player's ship's shields is drawn. The shields will be drawn as curved lines around the ship in varying degrees of width, depending on the health of those shields. On the top left will be target information. Players will be able to either cycle through targets on the screen (closest-outward) or select them using the mouse. Once targetted, limited information about that target will be displayed in this area, in almost an identical display to the player's health indicators on the top right. There will be a diagram of the target ship or object, with health denoted by color of outline. Basic ship stats, if available, will be displayed in text below the graphic. The bottom right area will hold basic loadout information. If the player has 4 kinds of guns on his ship, as well as a missile launcher with several types of missiles, these will show on the bottom right area, with the currently-armed equipment highlighted. All ships will start with some basic equipment, such as basic tractor beams and repair bots. These will highlight temporarily when activated by the player. The player can cycle through the available weapon settings using hotkeys or using the "Inflight Options" screen. Finally, the bottom left of the screen will hold the current reactor capacity and power distribution among the 3 major systems: Engines, Shields and Weapons. Three differently-colored bars will simulate the current charge % of these systems graphically. Players can open an "Inflight Options" screen to edit these settings on the fly in order to get more efficiency in one system or another, as well as setting presets and accessing these through hotkeys.

"Actor Layer" - Here, the player's actor graphic will be locked to center-screen where he will use the keyboard and mouse to interact with the environment, including terrain clipping areas, "monsters" and other obstacles. Here is where all sprites are drawn and animated independently of the background terrain. Basically, this is the layer where all the action happens.

"Background Terrain Layer" - I intend to make a "distant" terrain below the ship which moves at a distinctly different speed from the Actor Layer, to create the feeling of three-dimensional movement. Information from this layer will however be used in the Actor layer in the form of clipping planes and zones where the player may dock his ship, etc.

* Inflight Options Screen - This screen will hold all available options on the player's ship that are inaccessible while actually flying. From here, the player will be able to rebalance the output of his reactor, shunt power from one of the three core systems (Engines, Shields and Weapons) into another, and configure his weapon systems, among many other options.

--Controls Specification: The player will be able to choose between controlling his ship with the mouse (bounded to the inside of the window) or with the directional keys, which he can remap to WSAD or any other combination he chooses. Basic controls are as follows:

Movement Keys:
* "Accelerate" - Will thrust the player's ship in the direction he is facing (+Y), according to acceleration variables derived from his engine's rating and the total mass of his ship, which is dynamic. (available on: Play Area)
* "Decelerate" - Will thrust the player's ship in the opposite direction from that he's facing (-Y), according to acceleration variables derived from his engine's rating and the total mass of the ship, which is dynamic. Only available on some ships. (available on: Play Area)
* "Turn Left" - Turns the ship to the left at a predetermined constant rate, REGARDLESS OF CONTROL METHOD. (available on: Play Area)
* "Turn Right" - Turns the ship to the right at a predetermined constant rate, REGARDLES OF CONTROL METHOD. (available on: Play Area)
* "Strafe Left" - Thrusts the ship in the direction of the left wing of the ship (-X) at a variable rate, depending on engine rating and ship's total mass. Only available on some ships. (available on: Play Area)
* "Strafe Right" - Thrusts the ship in the direction of the right wing of the ship (+X) at a variable rate, depending on engine rating and ship's total mass. Only available on some ships. (available on: Play Area)
* "Afterburner" - Doubles the thrust output of the engine for a short time (player holds key down). Engine can overheat and shut down for a short period if this is used for too long. (available on: Play Area)

Weapons Keys:
* "Fire Guns" - Fires all enabled "gun" weapons. (available on: Play Area)
* "Fire Missiles" - Fires a salvo of missile(s) from the selected launcher, of the selected type, at the current target. (available on: Play Area)
* "Cycle Guns" - Cycles through logical combinations of gun configurations. (available on: Play Area, Inflight Options)
* "Cycle Missiles" - Cycles through logical combinations of missile configurations. (available on: Play Area, Inflight Options)
* "Toggle Gun X" - Toggles the gun in the X slot between enabled/disabled. (available on: Play Area, Inflight Options)
* "Cycle Missile Types" - Cycles through the available missile types. (available on: Play Area, Inflight Options)
* "Toggle Launcher Mode" - Toggles launcher setting between single-launch and salvo-launch, if available. (available on: Play Area, Inflight Options)
* "Tractor Beam Toggle" - Toggles the tractor beam on/off the current target. (available on: Play Area)

Shield Management Keys:
* "Balance Shields" - Takes available energy and redistributes it evenly among the fore, aft, starboard and port shields. (available on: Play Area, Inflight Options)
* "Supercharge Shields" - Adds all available weapons energy to the shields, effectively strengthening them. (available on: Play Area, Inflight Options)

Targetting Keys:
* "Cycle Fwd" - Cycles targets from nearest to furthest for purposes of missile/tractor beam targetting and mere informational purposes. (available on: Play Area)
* "Cycle Back" - Cycles targets from furthest to nearest. (available on: Play Area)
* "Target Nearest" - Selects the nearest object and targets it. (available on: Play Area)
* "Target Self" - Selects the player's ship as the current target. (available on: Play Area)

Game Keys:
* "Back to Menu" - Probably permanently tied to the [ESC] key, this will pause the game in the background (no controls available) and send the user to the menu.
* "Save" - Opens the save/load menu screen with the load option disabled.
* "Load" - Opens the save/load menu screen with the save option disabled.

--Program Flow: To be designed.

--Technologies and Development Tools Used:

* MS Visual C++ 6.0 (SP5)
* PuTTY suite (for connecting to SourceForge)
* DirectDraw (from DX9b)
* DirectInput (from DX9b)
* DirectSound3D (from DX9b)
* Win32 API
* Win32 GDI
* STL

--Resources:

* Special Effects Game Programming with DirectX, by Mason McCluskey (Premier Press | ISBN: 1-931841-06-3)
* Tricks of the Windows Game Programming Gurus: Fundamentals of 2D and 3D Game Programming, by Andre LaMothe (SAMS | ISBN: 0-672-31361-8)
* Physics for Game Developers, by David M. Bourg (O'Reilly Publishing | ISBN: 0-596-00006-5)
* MSDN (http://msdn.microsoft.com/default.aspx)
* Gamedev.net (http://www.gamedev.net)