Functional Spec

Outcomes and Scope
The desired outcome of this project is to demonstrate skill in each specialty area, while simultaniously creating a product that entertains its users.
 * Our game's content is claculated in Encounters, each of which should take 2 to 4 minutes to complete. We plan on having at least ten encounters by the game's end.
 * By extension of that estimation, this game should last half an hour.
 * To complete these encounters successfully, they will need to master quick tactics and planning, as well as long term risk-reward estimations.

Project Requirements

 * The final project should be installable on any Windows 7 PC or better
 * Memory requirements TBD, but should run on any computer with at least 512 MB of RAM
 * Hard drive installation should require less than 100 MB
 * Sound and audio will be fully supported using standard hardware
 * OpenGL 3.3 support or better will be required

Development Requirements

 * The development environment for this project includes Visual Studio 2013 with Windows 7 support
 * For art assets, Autodesk Maya will be utilized for 3D content creation and Photoshop will be utilized for 2D content creation

General Constraints

 * The project must work on a standard Windows 7 PC
 * If possible, the project should be able to work on other versions of Windows
 * The project should install all necessary software such as drivers, dlls, etc
 * The project will be stand-alone; no middleware is required to run the project
 * The project should be easy to use without reading an instruction manual
 * The project will meet all the TCRs currently required for this course

Install and Uninstall
The project should be able to be installed on any Windows 7 machine with the appropriate hard drive space and other system requirements. An error message should be generated if the project is unable to operate on the machine.

The installer will be simple to use, creating its own directory within the Program Files(x86) directory as per Windows 7 requirements. The user data generated will be stored in the user’s Documents directory.

The installer will be a full installer, not an unzip or other compression/decompression software.

Uninstalling will remove all of the installed elements of the project, including all user created content within the user directory.

Game Mechanics
See Game Mechanics and Controls.

Artificial Intelligence Overview
There is currently no expectation for complex interactions between entities, so AI behavior will be handled with a Behavior Tree structure. AIs will be processed sequentially.

AI pathfinding is not required at this time, but should debris or other obstacles be added to the arenas of the encounters, AI pathfinding could be handled using the A* algorithm, with a 2D grid as the search space representation.

The AIs will be data driven, using XML at data storage.

Graphics Overview
The project utilizes OpenGL 3.3 and GLSL shaders to render game objects.

3D models will use the FBX format.

Images and textures will be loaded using DevIL.

The GraphicsManager will act as a wrapper around the OpenGL API.

The SceneManager will handle all the render passes for scene objects. Creating a render pass is as simple as creating a new shader file and creating a render pass within the draw call and adding listeners to that particular render pass.

Physics Overview
Physics will be handled by a custom system. The system will be built around rigid-body objects, process contacts through an iterative approach, and resolve contacts using impulses, or short lived forces that are cleared after the integration step. Integration will be handled using Euler's method.

Spacial Partitioning
A BSP tree will be maintained using a SpaceManager, which will iterate through a container of Objects that require collision checks, and obtain their current position. Using the obtained position, both the X and Y components are divided by the size of each partition to ascertain which partition is it in, then flag the appropriate value according to that partition. This flag will then be used in the CollisionManager to only run checks with Objects that have the same flag.

Collision
Each Object will have one or more bounding volumes contained in a hierarchy, with less complex bounding volumes closer to the root of the hierarchy to serve as an early-out for collision detection. Child nodes must be physically contained within the parent node's bounding volume.

Use by a Player
See Game Interface Flow.

Use by a Potential Employer

 * The expectation is that all the uses for development and above would also be available for a potential employer. Additions to support a demo of a specific functionality within the project are stretch goals and TBD.

Metrics
The project has no specific plans involving metrics at this time.

User Interfaces

 * 1) Hardware Interfaces
 * 2) * The project must support keyboard and mouse within the stand-alone operation.
 * 3) Software Interfaces
 * 4) Menus – the project must have a main menu with options for full screen or windowed, changing resolutions, sounds on or off, volume adjustment, switching key assignments
 * 5) Default start – This launches the first level to be played.
 * 6) Pause – the project must be able to pause.
 * 7) Save/Load – the project should be able to save and then load a level including the following data:
 * 8) * The player's current stats
 * 9) * The player's current objective and progress
 * 10) * The state of the environment
 * 11) In-game display – some form of a HUD or console to support:
 * 12) For the User
 * 13) * Provide feedback on their current state, such as health and shields
 * 14) * Provide feedback on the actions they perform, such as defending or attacking
 * 15) For the Developer
 * 16) * Examine the state of any existing object
 * 17) * Add or Remove components from an object
 * 18) * Modify the current state of an object's component
 * 19) Credits, stating roles of people involved in the project

Networking or Communications Protocols
This project will not use networking.

Memory Constraints
There are no memory constraints on this project. However the developers will make a reasonable attempt to limit memory usage where possible,

Frame Rate
A target of the project will be to maintain a frame rate of 60fps or higher at all times.

Software Product Features

 * The project will support introspection for easily modifying data at runtime
 * The project will support scripting for modifying object behaviors without needing to recompile

Reliability
The project must be able to run without crashing most of the time.

Availability
The project must be able to run on Windows 7 platforms.

Security
The project must not be a security risk to users.

Maintainability
The developers on the project will all follow a standard coding convention including:
 * Naming conventions for files will be strictly tied to it’s functionality and will be clearly named so that at one look we will know what it does and what it might comprise of.
 * Logical filters in Visual Studio will also be enforced to ensure there is no cluttering of source files that have no relation to one another.
 * Commenting will also be strongly enforced to ensure clarity and readability when other group members have to read your code. It is understandable to have minimal code for source files, but Doxygen style comments will be required when declaring a function.

Portability
The project has no requirements on portability.

Performance
The project must be able to maintain a playable frame rate at all times.

Database Requirements
The project will not incorporate a dedicated database solution.

Other Requirements
Any other requirements that do not fit into the categories above are TBD.