Professional Documents
Culture Documents
Brian.sorin@gmail.com
407.920.6609
brianjgoodsell@gmail.com Grant_landreth@yahoo.com
516.510.3266 423.368.4111
Robert Barnette Programmer Shane Cadrette Artist Rory Collins Programmer Caryn Cook - Artist Joel Faiella - Programmer Nick Faletra Programmer Brian Hong Artist Dan Mamo Artist Virgil Melvin Artist Morgan Pinkston Artist Dan Southard - Programmer
rbarnettejr@gmail.com darthelessar@hotmail.com Roryjcollins@gmail.com Cook.caryn@gmail.com Joel_faiella@hotmail.com nick@ictbc.com Brian.le.hong@hotmail.com danieljmamo@gmail.com Virgil_melvind@hotmail.com Iki_mono@hotmail.com Southard.dan@gmail.com
267.262.3399 315.790.4576 570.604.8097 619.249.4835 508.843.5451 720.897.5353 860.940.3427 609.610.0342 850.447.1082 813.519.5905 239.357.6423
Table of Contents
2|Page
Production Document
Razing Ancients
3|Page
Game Charter
Vision Statement
The goal of this project is to create a fun and done pc-based video game within a five-month timeframe that focuses on highlighting the Project Teams technical proficiency and artistic talent while falling within the scope of Full Sail Universitys Final Project curriculum. During that time, the Project Team will spend two months creating and documenting the design of their game followed by three months of executing their vision. This project is a culmination of the skills and techniques developed by students of Full Sail Universitys Game Development, Game Art, and Game Production programs. A Project Team of seven undergraduate programmers, seven undergraduate artists, and a graduate Project Manager will undertake the process of designing and developing an original video game within a five-month timeframe. In addition, the Project Team will be exposed to a development cycle and a set of rules and regulations outlined in extensive Final Project documentation provided by GP Games Studio that is reflective of current standards in the video game industry. With the completion of the project, students will have gained the necessary skills and experience to work as professionals and fill critical roles within the Game Development industry.
Meetings
All Project Team members are expected to attend all defined meetings and work sessions and are expected to work together in the same location for those defined times. Work on Project related tasks outside of work sessions is of course encouraged but the majority of all work completed for the Project will be completed in a cohesive, co-located, team environment.
Meeting Location
All meetings and work sessions will be held at the following location: Duck N Cover Productions 3733 North Goldenrod Road Apt. 1104 Winter Park, FL. 32792 A backup meeting location will be provided if for some reason the main meeting location is not available. Notifications will be set to the entire project team through email identifying the new meeting location and any other required information. By default, the secondary meeting location will be as follows: Dystopian Games Studios 3001 UK Cir. 4|Page
Meeting Times
The default meeting time for all meetings outside of class will start at 11:00am EST. and run until 8:00pm EST, Monday through Saturday.
Meeting Structure
Meetings will be broken up into three main sections; initial review, work session, and wrap-up. Initial Review During this phase of the meeting, lasting roughly 15 minutes, the team will complete a Turbo Team and each member will address three essential questions to the Internal Producer; What tasks have you worked on since the last meeting, What tasks are you working on this meeting, and are there any impediments preventing you from completing your tasks. Work Session This portion of the meeting lasts for eight (8) hours and is the time when the majority of all work for the project is completed. Project Team members are free to take breaks as they see fit, limiting themselves to 10 minutes total per hour. A one hour lunch/dinner break will be provided four hours into the work session and does not count towards the eight hours allotted for the work session. Wrap-up This final section of each meeting will encompass a completed work review and provide a second opportunity to address any issues that have arisen throughout the work session. A final file check will be performed ensuring all work is submitted to the Alienbrain servers and after that point the meeting will end. This portion of the meeting will last no more than 15 minutes.
5|Page
Four (4) hour work sessions will be held on Monday through Saturday after class to facilitate the completion of required Project tasks.
Capacity Planning
Below is a monthly capacity plan outlining the ideal minimum work hours of all members of the project team. Hours Per Day Work Days Work Hours 8 Mon - Sat
23 184 February
27 216 March
26 208 April
25 200 May
Name Development Team Totals Programmer Programmer Programmer Programmer Programmer Programmer Programmer Art Team Totals Artist Artist Artist Artist Artist Artist Artist
Team 1288 PT PT PT PT PT PT PT AT AT AT AT AT AT AT 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 184 184 184 184 184 184 184 1288 184 184 184 184 184 184 184 1288 184 184 184 184 184 184 184 1288 184 184 184 184 184 184 184 1512 216 216 216 216 216 216 216 1512 216 216 216 216 216 216 216 1456 208 208 208 208 208 208 208 1456 208 208 208 208 208 208 208 1400 200 200 200 200 200 200 200 1400 200 200 200 200 200 200 200 EQUAL 992 992 992 992 992 992 992 EQUAL 992 992 992 992 992 992 992
2576 322
2576 3024 2912 2800 13888 322 378 364 350 1736
Rules of Conduct
All members of the Project Team are expected to act as professionals at all times during any group activity.
Attendance
All members of the Project Team are expected to be at all scheduled meetings on time. Being on time constitutes being ready to participate in any work related activity as soon as the meeting starts at 11:00am EST. If any member is expecting to be absent or late for any meeting must notify the Internal Producer ahead of time. Any deficit in attendance will result in documentation detailing the situation.
Work Ethic
All members of the Project Team are expected to work to their fullest potential and meet the standards set and expected by the Project Team and GP Games studios. If at any time a member of the Project Team is experiencing problems with any task assigned to them they are expected to seek help through the appropriate channels as soon as a problem is identified.
Conflict
Conflict such as unconstructive arguing or physical fights will not be tolerated between members of the Project Team with each other or anyone else associated with GP Games. Upon any serious conflict, the offending parties will be immediately separated and given time to cool down before the situation is resolved in a more reasonable manner. If the problem persists, offending parties will be separated and asked to leave the meeting until further mediation can be used. In any circumstance, the issues will be documented and brought to the attention of appropriate GP Games staff members. 7|Page
Decision-Making Process
The following flow chart represents the structure of the project team, how they are expected to communicate, and is the basis of the following decision-making process. This is to be used as a basis for how communication occurs within the team, but is by no means a limit to the channels available to the Project Team.
Reporting Communication Final Project January 2010 Projected Team Structure 1 Producer 7 Development 7 Artist GP Games Two-Way Communication Inter-Team Communication External Producer
Internal Producer
Programming Lead
Art Lead
Technical Lead
Gameplay Lead
Testing Lead
Modeling Lead
Environment al Lead
Cutting Features
The responsibility to ultimately remove a feature from the approved task list and schedule falls on the project teams Internal Producer. Feedback and discussion on the decision to remove a feature will come from the Leadership structure and the IP. For the removal of features that that affect the game on a large scale, the teams External Producer will be consulted on its removal.
Deciding on Features
During the process of creating our fully realized Feature/Task list, the entire group will sit down together and discuss both the technical and artistic aspects of each feature. After the details of each proposed feature are presented and discussed the relevant Leads will provide additional feedback and ultimately decide on the feasibility and implementation of that feature with the Internal Producer. Through thorough discussion of each topic and the intended reliability of the Leadership teams ability to make decisions on behalf of the team and in its best interest, once a topic is discussed and decided on it is
8|Page
considered to be finalized. To that end, the entire Project Team is expected to ask any relevant questions and address any concerns during the discussion portion of a features discussion.
Team Roles
The following sections outline a high-level view of the roles and responsibilities associated with the development of a GP Games title. In the case someone is assigned a task that does not strictly fall within their assigned following description they are still expected to work on and complete that task according to the standards of the Project Team and to their best ability.
9|Page
is responsible for ensuring all model related GRC criteria are met, assisting the Model Development Team through support and guidance, and frequently communicating project updates to the Art Lead.
Technical Artists John Soza, Vergil Melvin, Dan Mamo, Jason Speakmean
Technical Artists of the Project Team will consist of undergraduate Game Art students working on either the Modeling or Environmental Development Teams. Technical Artists will fill available roles on their respective teams and are responsible for the design and development of game assets in accordance with the asset list and the overall style of the game. Technical Artists are also responsible for completing assets that comply with GRC standards, assisting other Technical Artists through support and guidance, and frequently communicating project updates to their relevant leads.
11 | P a g e
Interactivity
Summary
Razing Ancients is a 3D third person platformer set in a nature-based fantasy world. The main character traverses a giant tree-like creature in hopes of discovering what happened to his village and taking revenge on the beast.
Goal
The main goal for the user is to reach the top of the ancient creature by jumping, swinging, and climbing up and along its body. The player will come across environmental puzzles that must be solved in order to proceed.
Interface
Main Menu
Below is a component list of all elements of the games main menu screen. Studio Splash Duck N Cover Splash Game Splash Main Menu 1. Start New Game Load Game 2. Options Video Gamma Fullscreen/Windowed Toggling Graphic Effects Default Settings Audio Music Sfx Mute All Default Settings Game Play Controls
12 | P a g e
3. Credits 4. Quit
Studio Name Team Name Team Members/Positions 3rd Party Credit Special Thanks
13 | P a g e
Options Screens
14 | P a g e
Feedback
All interactions with the menus will have an associated feedback component. When any button intersects with the cursor or is selected by the keyboard the button will become highlighted and a very slight sound will play. When clicking/selecting any button within the menu a confirmation sound will play. Any loading screen within the menu system will display an animation that represents loading progress to notify the player that the game is still working.
15 | P a g e
HUD
To support the idea of a fully immersive environment and because of a lack of relevant and critical ingame information, our game does not make use of a visual HUD. Instead, visual effects and audio based queues will be used to represent actions that affect the player. These effects are outlined in our Effects section of the document but for example, things like camera shake and color changes will be used to signify the living environment and highlight important interactions for the player.
Controls
The controls of any game are essential to a smooth interaction between the player and the environment. Our game provides, by default, a layout suitable for the actions necessary for our style of game. In addition, we provide the player the freely modify their key bindings from the games main options menu as described above.
Mouse / Keyboard
The main way that users will control the player character within the game world is through mouse and keyboard input.
WASD Move the player character forward, left, back, and right within the game world relative to the cameras current position. Space Jump Left Mouse Button Melee Attack Right Mouse Button Context-sensitive Activation F1 Help Escape/P Pause Menu Mouse Look Camera Control Middle Mouse Button Reset Camera Position
16 | P a g e
Left Analog Player Movement Right Analog Camera Control A Jump X Attack B Cancel Right Trigger Context-sensitive Activation Left Trigger Context-sensitive Activation Start Pause
Interactive Rhythm
Summary
Times are based on perceived first time player expectancy. Play Session 5-10 minutes Total Play Time 20-30 minutes Replay Exploration and new areas Basic Enemy 1 second Boss Encounter 5-10 minutes
A typical play session which consists of a single play through of one level will last approximately three minutes. Because there are 5 distinct levels, the overall length of the game is approximately 15 to 20 minutes for the average player. Replay value of the game comes in the form of further exploration of the level and the discovery of new areas off of the normal path. 17 | P a g e
As the player progresses through levels the action is broken up between times of action and inaction. The flow of each section of the game follows a similar pattern; a challenging platforming area, a puzzle based room, and finally a section that allows the player to rest and transition between two levels. These final transition areas help to separate the game world and indicate to the player that theyve completed a section and are able to move on. While combat is not the focus of the game, when enemies are present and close to the player they will simply take one hit and they will die. The interaction with the enemy should last no more than one second. In contrast, the final boss encounter, which also acts as the final level, will take approximately three minutes to complete.
Checkpoints
When the player reaches designated areas within the game world the main character will make a mark on a nearby wall or tree to signify that the character has completed a section of the level. At this time the game will save out the players location as a checkpoint. If a player dies past this point their character will respawn at this checkpoint allowing them to try to progress again.
Collectables
Strategically scattered throughout the game world are a series of basic collectables (ancient artifacts that act as clues to understanding the ancient) for the player to find. These collectables help to both non-verbally progress the story while both providing players with a reason to explore the game world and a secondary goal to keep them interested.
Level Destruction
After a player reaches a checkpoint starting on level two they will trigger an event that burns the previous section of the game world signifying that the player is progressing up this creature and destroying it as they go. In addition, as the player is moving through new areas of the world they will get glimpses of the scope of the game world when they are near the edge of the map, shown in the form of the ancients massive arms swinging by as they walk or the shaking of the entire level as the creature walks.
18 | P a g e
Application Start
Studio Logo
3 Sec
Team Logo
3 Sec
Game Splash
Main Menu
Start Game
Options
Credits
Exit
Audio
Video
Gameplay
Application Close
Game Start
Pause
19 | P a g e
The Player is able to pause the game and gains access to options, help, and a way to exit the level.
At the end of each section the players progress is automatically saved through checkpoints.
Success
Success
Failure
Failure
20 | P a g e
Level Three
The Player is able to pause the game and gains access to options, help, and a way to exit the level.
Success
Final Cutscene
Credits
Main Menu
21 | P a g e
Glossary of Terms
Activate The player activates a triggerable object directly in front of them with a delay of 5.0 after each activation. Activate Trigger The machete is used to activate specific triggerable objects throughout the game world. Activation Delay The time between the activation of one triggerable object and the next. Agro Radius The range in which an AI Agent is able to identify the player character and react. Attach The grapple hook extends itself to a designated grapple point within the game world and allows the player to perform the swing action over a gap. Attack The Ancient shakes the entire world and releases boulders from the canopies above the players head. Attack The enemy charges at the player and when they make contact with him they knock him back, making the player stumble, by 0.5 units with a delay of 3.0 seconds. Attack The machete attacks, swung by the player, and deals 100% of the total health of a basic enemy. The attack range of the sword is based on a 180 degree left to right arc in front of the player and a 30 degree arc up and down. Attack The player swings their weapon with a delay of 1 swing every 1.0 second. Attack Count The number of boulders the Ancient is able to attack the player with. Attack Damage The amount of damage a single attack that connects with a target can do. Attack Delay The time between the end of one attack and the beginning of the next. Attack Speed How quickly a specific weapon is able to attack. Chase Duration How long an AI Agent is able to chase the player before giving up. Climb The player will move vertically up a climbable object such as a moss wall at 0.5 units / sec. While in the climbing state the player cannot jump out of it. They will need to either reach the top or bottom of the climbing area to continue on. Climb Speed A constant speed at which the player is able to move up or down a moss wall. Death If at any point the player fails to complete a platforming activity and falls below the platform they will die and need to restart from the previous checkpoint. Emote The Ancient bellows across the lands signifying his anger at the player. This is a passive effect that is used strictly for audio effect to emphasize the size of the creature. Emote Delay The frequency of how often the Ancient is able to emote and disrupt the world. Exit Point A point designated within the game world that signifies where the player exits the world. Exit Point Count The number of Exit Points within a specific level. Jump The ability of the player to move vertically from either a standing or running position. The player always jumps a height of 0.5 units regardless of speed or momentum. Jump Distance A constant distance of 1.5 which a character is able to jump. Jump Height A constant height of 0.5 at which a character within the world is able to jump. Platforms The basis of what the player will run on, they act as small island like landings that the player can jump to. Player Spawn Count - The number of player spawn points within a specific level.
22 | P a g e
Player Spawn Point A point designed within the game world that signifies where the player enters the world. Raze The grapple hook attaches itself to a destructible object within the game world and pulls it down clearing a path for the player to progress. Run A constant speed of 1.0 units / sec that the player moves at. There is no acceleration or deceleration time associated with the player stopping and starting the main characters run action. Run The enemy moves on the ground either aimlessly or towards the player depending on their current AI state at a speed of 1.5 units / sec. Run Speed A constant speed at which a character within the world is able to move. Scaleable Objects Objects within the world that the player can climb on, attach to, swing on, or perform a special run action on. Seek The enemy activates their AI pattern of identifying the players location and approaching him for an attack provided the correct parameters at met such as being on the same platform. Swing The player attaches themselves to a rope or vine and leaps off one platform and lands on another by holding on to the rope/vine. A swing will always move the player 3.0 units horizontally. The player is in control of their forward momentum while in a swing. By holding forward they will swing faster. If the player has no momentum they will not fall off a swing but will be able to add momentum by holding forward again. Swing Force A force applied by the player on a swing that propels the rope forward or back. Trigger Volumes Invisible spaces within the game world that, once entered by the player, will activate actions, effects, or events.
23 | P a g e
Characters
Name
Our character is not given a name specifically. There is no point within the game that it would be expressed and this way the player is able to more easily able to associate with the character.
Brief Description
This is the main character. He can climb and jump around the levels. In addition, the character has a number of tools at his disposal throughout the entire game such as the torch, and grappling hook which are all described in the Weapons and Tools section below.
Visual Design
Short hair, sticks out in random directions Sleeveless shirt Leather Belt/Bracers Loose Fitting Pants Leather Greaves Boots Pouch hanging from belt Grapple Hook wrapped around body Machete hanging horizontally below back
Behaviors
Run Jump Swing Climb Activate Trigger
Attributes
Run Speed Jump Height Jump Distance Swing Force Climb Speed Activation Delay Constant 1.0 units 0.5 units 1.5 units 0.1 forward momentum 0.5 units 5.0 seconds
24 | P a g e
Name
Creepers (Cut from final game)
Brief Description
Enemies in our game are small creatures living on the ancient that have been corrupted by the ancients presence. They are not evil by nature but instead are just protecting the areas they inhabit.
Visual Design
A small, ancient-dwelling, reptilian-like creature with a thick, tough skull used for ramming its enemies. It has two short legs and a round, soft body that makes his movement around the ancient quick and efficient.
Behaviors
Attack Run Seek
Attributes
Attack Speed Attack Effect Run Speed Attack Delay Agro Radius Chase Duration 1.0 second Knockback 0.5 units 1.5 units 3.0 seconds 5.0 units 10.0 seconds
25 | P a g e
Name
Ancient
Brief Description
He is a giant tree-like creature that destroyed the main characters village when waking from its slumber and also acts as the game world. It is important to note that the Ancient takes a very passive role in terms of actual gameplay. It acts as the game world itself and does not directly interact with the player.
Visual Design
Enormous Size Roots Rocks Trees Ruins Biped Creature
Behaviors
Attack Emote
Attributes
Attack Delay Attack Count Attack Radius Emote Delay 10.0 seconds +- random intervals between 5.0 seconds 3-5 boulders 3.0 8.0 units around the player with at least 0.5 unit spacing 5.0 30.0 seconds
26 | P a g e
Weapons
Name
Machete (Cut from final game)
Brief Description
The machete is a curved blade thicker than an average sword on a hilt. Its function is to cut vines, foliage, ropes, and to fend off attackers. It is the characters external tool and main weapon. The character possesses it throughout the length of the game.
Visual Design
The weapon has two parts a hilt and a blade. The hilt is made of twisted wood with small carvings spiraling around it. The metal on the blade itself is dulled and rusted; it has a fair amount of surface scratches like it has been used for generations. The blade is thick and flat with sharpened edges.
Behaviors
Attack Activate Trigger
Attributes
Attack Damage Attack Range Activation Delay 100% enemy health 180 degrees In front of the player left and right and 30 degrees up and down 5.0 seconds
27 | P a g e
Name
Grapple Hook
Brief Description
The grappling hook is another utility of the player designed for climbing. The grappling hook is used in conjunction with grappling points. Once the grapple hook has made contact with a grapple point, the player can either use the grapple to climb, swing between two points or destroy the grappled object.
Visual Design
The grappling hook consists of the actual metal hook attached to a length of rope. The head of the metal hook will have three prongs that curve back towards the base. The hook is made of a strong dull metal. The rope is made of a thick twine extending to a maximum of three units.
Behaviors
Attach Raze (Cut from final game)
Attributes
Attach Distance Attach Delay Raze Distance Raze Delay 1.5 units 1.0 second 1.5 units 5.0 seconds
28 | P a g e
Name
Torch
Brief Description
The torch is an off-hand utility carried by the player throughout the game that is used to burn objects. The player brandishes the torch when near specific flammable locations. The torch is put away when he steps away from these locations.
Visual Design
The torch is a shaft of wood with cloth wrapped around the top for flammability. The shaft is rounded in shape with odd misshapen deformities.
Behaviors
Activate Trigger
Attributes
Activation Delay 1.0 second
29 | P a g e
Level One
Name
Tutorial Level (Level 1)
Goal
The main goal of this level is to introduce the player to the main features of the game and teach them how to interact with the player character and environment. Features the player will be introduced to within this level are platforming, jumping, climbing, and simple puzzles. Secondary goals of the level include exploring the new areas and reaching the next level.
Attributes
See Global Attributes section for additional attributes.
30 | P a g e
Time
Times are based on new player ability expectancy. Traversing all platforms 2 min Trigger Event - Instantaneous Ladder Animation 2 sec Revealing Ancient Cutscene 1 min
31 | P a g e
Map
Maya Blockout
32 | P a g e
2D Representation Concept
33 | P a g e
34 | P a g e
35 | P a g e
Name
The Beasts Leg
Goal
The goal of this section is for the player to make their way up the awakened titans leg. This section will be divided into 6 (transition area) different sub-sections, each changing the theme, movements and dangers. The player starts in a controlled, open space filled with rocks and broken brush to help re-in force the movement, jumping and climbing behaviors they learned in the previous section. As the player moves through the sections, they are taught one new skill or usage of a previously learned skill to get through the space. Dangers such as death sections begin showing consequence from the third section forward. Once the player makes it to the last section, they will be met with a puzzle, in which they will need to interact with the environment in order to unlock the exit and move forward to the next level.
Level Travel
In the first section, the player will be in a controlled space that is enclosed through the use of static meshes. They will be using the movement keys to navigate the player around the open space and the Jump button to ascend to higher platforms and the context sensitive button to climb up to higher ledges. The player will be using these controls to climb pieces of rocks and scale faces of the walls in order to make their way through the path. The first section ends with a teaching of the swing mechanic with a found rope or vine hanging off of a tree branch. The rope will allow the player to make their way over a non-consequential pit. This will help in force the usage of the mechanics to be re-iterated and expanded in the next section. The second section will begin with a transition in theme, shifting from a safe enclosed wide path to a more complex platform tree area. The layer will be making their way along the edges of tree branches to make their way through the entirety of the space. The ground will consist of a rock quarry that acts as an enclosing volume.
36 | P a g e
Attributes
Object Puzzle rope Falling (death) Swinging Wall Running Wall jumping Platforms Quantity 5 na 4 na na 20 Speed/distance na na 1.5 units per second 1 unit per second 3.0 na Damage 1 hit 100% na na na na
Particles
-Dust for when the player hits the ground or on sections that are applying that they are shifting -Rocks crumbling visual effect for when we are scaling the side of the wall -Leaves falling for areas around trees when player lands on branches that have foliage. There would happen when climbing as well.
Sfx
Ambient crumbing, Shifting/falling rocks Wind sound for wide open faces Low grumble from the titan -Dragging sound from titan moving forward
Time
The player will take approximately 10-12 minutes to make their way through the entirety of all 4 sections including the puzzle area.
37 | P a g e
Map
Maya Blockout - Outside
38 | P a g e
39 | P a g e
40 | P a g e
41 | P a g e
42 | P a g e
43 | P a g e
44 | P a g e
45 | P a g e
Name
Boss Level (Cut from final game)
Goal
Primary - Defeat the Boss Use all knowledge you have acquired to defeat the boss.
Level Travel
Travel through this level will have the player use all of the known skills in his repertoire these being jumping, climbing, swinging, wall running and wall jumping, to get to all required points of interest.
Attributes
Spawn Points The starting position for the player. Triggers points of interest the player interacts with to manipulate the boss. Scalables Vines, Moss, grapple points Platforms Tree limbs, Stumps, ruined walls Spawn Points 1 Triggers 5 Scalables 7 Platforms 12
46 | P a g e
o Breaking platforms o Falling large pieces of debris Transitions o Cutscene of him dying Random Triggered Events o Debris falling from the top of the level to damage player o Wall Falling debris breaks the wall so you cant hide for cover anymore o Leaves Blowing
Time
3 minute battle Ending cut scene 30-45 seconds Breaking Platform Animation 1-2 seconds Debris Animation 1-2 seconds
47 | P a g e
Map
Maya Blockout
48 | P a g e
49 | P a g e
Camera System
The games camera system is a critical component that allows the user to experience our world through two distinct views that both enhance the gameplay and cinematic experience for the player.
Outside View
The outside view of the camera is going to be relative to the player and the position in the world where he is located. We are going to have the camera faced at the player but also the environment so you can get a great feel of ancient that you are on. We are going to have a vector to the center of the world and the player and make it face in that direction to achieve this.
Transitions
As the player approaches an indoor section of the level the camera will begin to transition, according to the players distance from the doors entrance trigger volume. The closer the player is to the doorway the camera will begin moving towards its 3rd person perspective used in the indoor areas as described below.
Inside View
The inside view of the camera is going to be hard attached over the players shoulder but its also going to be able to handle camera collision. The camera is going to be set over the players shoulder granting you a great viewpoint for the puzzles we plan to have.
Camera Collision
Because we have some tight sections in our indoor puzzle areas we intend to handle camera collision without disrupting gameplay and understood angels. In general, the camera will have basic sphere to AABB collision on regular objects within the game world. When the player backs up to a wall the camera will stay in place and the player will become semi-transparent so they are still able to see the environment in front of them without the camera moving in unexpected directions.
50 | P a g e
Effects System
Description
Because we chose to express story elements in our game without the use of dialog, things like effects become essential to communicating whats going on in the world. Our effects will be used to signify when things are happening within the game world such as trigged events, player actions, and background effects. In addition, effects will be used to identify interactable objects within the game world so the player can visually recognize them.
Usage
Running/Landing The player will kick up dust on the ground when they run Climbing Leaves and dust will fall as the player climbs the moss/vine walls. Checkpoints Interactable Objects/Triggers They will sparkle signifying they can be interacted with Torches Once lit the torches will emit a fire and burning effects Environmental Effects Wind/Leaves/Fog/Falling Rocks/Light that is triggered as the player moves through the world Burning After checkpoints, the previous section of the level will be lit on fire. Rumbling The entire screen will shake signifying the world is living.
Basic Implementation
Our effects system uses two implementations to represent effects within our world; Point Emitters and Volume Based trigger systems. Point emitters allow us to strategically place effects throughout our world that provide an anchor for our effects while a volume based trigger system lets us customize effects and respond to actions the player performs while moving through the game world.
51 | P a g e
Combat
The combat is simple, occurring in real time. The machete is our only weapon. Get within melee range of target and perform a sword attack. All attacks are single swings in the direction the player is facing, resulting in instant kills for any enemies in contact with the blade, not including the boss. The player can swing his sword at any time they are NOT inside a cut scene, brandishing an item, or extending a grapple. If the enemy intersects the swords path while swinging, then it is considered hit. When the player is hit by an enemy the player is knocked back potentially knocking them off a platform.
52 | P a g e
Platforming System
Platforming is an integral part of our games player interaction and involves a number of intricate maneuvers and techniques.
Actions
Jumping As long as the player is grounded jumping pushes the player off the ground vertically by 0.5 units for a distance of 1.5 units. This state ends when the player touches a solid surface. While in the air, the player will continue moving in the direction they were when they began the jump. Assisted Wall Running The act of using a rope as a support while moving horizontally along a vertical surface at running speed. The wall running distance is 3 units. Climbing Contextual interaction with a scalable object will enter a climbing state. This may be cancelled by reaching the top or the bottom of the scalable terrain. The speed by which we can climb is half the run speed. If there is an adjacent climbable surface is not directly connected to the current climbable surface (i.e. gap) and the distance is 0.5 units between these two surfaces, the player can move in the direction of the adjacent surface and press the action button to jump the gap. Balancing When the surface is narrow the players maximum forward movement is reduced to half the run speed. The state ends when the narrow surface has been traversed. Swinging After jumping to a swinging object if the player presses the action button they will grab the rope. Swinging is based on the movement of the player. The swing state ends when the player presses the action button. Grapple Hook Throws the grapple hook towards a grapple point. This creates a swingable object extending down from the grapple point. This swingable object is treated exactly the same as a standard swingable object, allowing the player to perform the swing action on them. The grapple action can never fail, and can only be performed when the player is within 1.5 units a grapple point. There will never be more than a single grapple point within the players reach.
Objects
Scalable A surface that can be climbed by the player in order to reach a higher platform. Swingable A vertical restraint such as a rope or vine that can be swung on by the player. The player can influence the swing using the movement controls. The player can attach and release themselves from the rope using the action button. Ledges The edge of a surface or apex of a wall that can be grabbed by the player, and used to help the player up onto the platform. Beams A narrow surface such as a pole or branch that the player can walk along. Grapple Points Points designated as grapple accessible. The grapple point has a bounding volume that indicates when the player can grapple to that specific point. The radius of the bounding sphere is 1.5 units. 53 | P a g e
Player Enemy Boss Sword Torch Grapple Hook Platforms Vine Walls Triggers Grapple Points Trigger Volume Boulders Checkpoints
Player Enemy Boss Sword Torch Grapple Hook Platforms Vine Walls Triggers Grapple Points Trigger Volume Boulders Checkpoints
Torch Use X X X X X X X X X X X X X
54 | P a g e
Platforms Player Enemy Boss Sword Torch G. Hook Platforms Vines Walls Triggers G. Points Trigger V. Boulders Checkpoint Stand Stand X X X X X X X X X X X X
Walls Run/Jump X
G. Point X X X X X Attach X X X X X X X X
T. Vol. Context X X X X X X X X X X X X X
Checkpoint Save X X X X X X X X X X X X X
X X X X X X X X X X X
Collision
AABB to AABB for most things o Axis-Aligned Bounding Box, or AABB, is a bounding system that uses a box aligned to a specific axis. This technique is very fast and low memory intensive, and is good for quick bounding checks for flat or low-detail objects.
55 | P a g e
Sphere to Sphere o A basic geometry-based collision pattern useful for quick and cheap detection of primitive objects within the game world. Implementation of this pattern within our game is easy and effective while being computationally efficient.
Culling
BSP for level division o BSP is the division of an environment to produce a subset of compartments that can be used for speeding up rendering, AI, collision, and culling. The individual compartments can be sorted according to their orientation to the player for techniques such as alpha and depth sorting. We will be utilizing BSP simply for performance gains overall.
Animation
Smooth Skinned o Smooth-Skinned animation is the process of rigging a skeletal bone structure to a contiguous skin in order to produce the flexing and bending behavior of organic structures. Though it is computationally more expensive, it produces a more believable organic player-character, which is more appealing to look at.
Rendering Techniques
Bloom/Blur/Shimmer Etc. o A series of visual effects used to better represent real-world lighting dynamics without the extra computational expenses associated with actual lighting. We feel these techniques will be cost effective while promoting the look and feel of our world that we are looking for.
FAQ
1. Is this game multiplayer? a. No. We wanted to focus on solid gameplay and avoid the common pitfalls and restrictions that a networked game presents. 2. Why is combat not the focus of this game? a. While we understand that combat is an important aspect of many games, we wanted to focus on the traditional gameplay style of platforming and focus on the interaction between the player and the environment. 3. Why is the Grapple Hook restricted only to certain areas of the game? a. The grapple hook is a situational tool that was designed to be used in specific, well defined areas of the game to facilitate travel for the player and different ways to interact with puzzles in the environment. 4. Why is there no in-game HUD?
56 | P a g e
5.
6.
7.
8.
9.
10.
a. We wanted to keep the player as immersed as possible within the game world and felt that the inclusion of a HUD would not provide the player with any additional necessary information. Why does the player not have a limited number of lives? a. We felt that to keep the flow of the game moving and to alleviate the stress associated with a limited number of continues we would allow the player to continue from the previous checkpoint as often as necessary. Why is the player not allowed to save at any time? a. To continue with the feel of a fully immersive environment we felt automatically saving for the player in predefined points would be the most effective and least intrusive method. Why is there no clearly defined health system? a. Following the same conventions of a fully immersive environment and to add a sense of realism, if the player is hit by an enemy they simply fall backwards or if the player falls down a hole they die. Why are there no other NPCs or entities to interact with in the game? a. We wanted to convey as sense of loneliness and scope to the game world that helped to convey the story elements presented in the games cutscenes. Why is there a lack of dialogue? a. We felt that dialogue would not be an effective method to convey story elements within our game world and wanted to rely on ambient sounds and visual effects. What happens to the player after the final cutscene? a. We wanted to leave what happens to the main character an ambiguous story element and allow the user to fabricate their own ending.
57 | P a g e
Rewards
In addition to the reward of finding all available collectables within the world (as described in the How the Player Marks Progress section) , the player is intrinsically rewarded through accomplishing the puzzles presented throughout the game and by skillfully traversing the intricate platforming aspects of the game world.
Transitions
Saving
There is an auto-save checkpoint system. Once the player reaches a predefined location the game will auto-save the players progress. When loading only the players position at that checkpoint is loaded. See the level map layouts for checkpoint locations and the checkpoint system of how the Player Marks Progress section.
Cut-scenes
At certain points in the game scripted visual events will take over the players control. These cut-scenes will be used to illustrate game progress.
58 | P a g e
59 | P a g e
60 | P a g e
Technical Document
Razing Ancients
61 | P a g e
Milestone Deliverables
The following outlines major gameplay aspects present in the game at the end of each of the respective milestones.
Proof of Concept
A basic game world that represents the flow of our intended level design Character Control o Running o Jumping A win condition similar to the goal of the actual game, to reach the end of a level A loss condition, falling off the side of a platform Basic camera functionality
62 | P a g e
An additional section will be added to the main level providing new areas to explore and new challenges for the user. Basic puzzles will add a new layer of complexity and fun to the game world Users will be able to create, use, save, and load through a profile system that will save their preferences and progress in the expanding game world.
Alpha
The tutorial and boss level will be introduced in this milestone The player will be able to wall jump Overall movement of the player within the game world will be refined and more fluid to provide a more immersive gameplay experience Puzzles will be fully implemented Combat will be introduced, providing new forms of interaction for the user Cinematics will help to further the immersive feel of the game world Collectables will be implemented throughout the environment 360 Controller support will be added
Beta
The culmination of the game so far, with a push for polish on both the fluidity of player movement and control and the immersivness of the game environment through the camera and environmental effects.
Final
The final version of the game with a highly polished gameplay experience that draws the player in and urges them to explore the game world while almost effortlessly traversing the environment and its obstacles by the tools and movement techniques at their disposal.
63 | P a g e
Development Environment
Visual C++ v9 Microsoft-brand development environment and compiler for the C++ programming language. Maya 2008, 2009, 2010 3D modeling software package from Autodesk. Alienbrain v9.0.0.10674 Source control software developed by Avid Technology, using license keys provided by Full Sail. Wwise v2009.3 Patch 2 WaveWorks Interactive Sound Engine is an advanced audio authoring tool and sound engine developed by Audiokinetic.
64 | P a g e
System Architecture
System Architecture Flow Chart
Core
65 | P a g e
Context Module Description Engine Overarching wrapper that contains all modules. It is initialized from WinMain and acts as a springboard for the game components. Core Internal Management object that initializes updates and shuts-down all internal components of the engine. It interacts with all critical components. Geometry Processing Manages all the renderable objects currently being processed by the engine, it is updated by the core and sends processed renderable data to the renderer for rendering. User Control Manages the state of the engine and interfaces with the user. It dictates what assets are requested from Filestream. Object Manager Object Manager updates all of the objects that have been placed in the game world. These objects transforms are used by geoproc in order to position rendering data. Asset Factory requests new objects when a new asset request is sent. Effects Processing Updates all current pending effects in the game world. Receives new effect requests from the asset factory. Renderer Renders renderable objects that have been passed from geoproc after they are sorted. Animation Processing Updates the current animations that have been associate with objects in the game engine. It receives new animation requests from the asset factory. Filestream Receives requests from the UserControl and Engine and distributes newly loaded data to the current storage classes. Example, new models go to model storage, or new textures go to texture storage. Asset Factory Interfaces with all the storage containers and assembles new batches of assets that will be referenced by objects in the object manager. Asset factory requests new objects to associate when an asset request is made. Asset factory is sent requests by UserControl. Interpolator Contained by the animation processor. Manipulates the skeleton of a specific object based on an interpolation on an animation. Threadpool Allows streamlining of assets into game without locking main process thread. Used by the filestream in order to delegate tasks. Renderable Object Container for render data. Sent from the geoproc to the renderer. Data contained is used to render the object. RenderCode Container for a rendering function, stored by the renderer, and referenced by a renderable object. GLContext3D Manager for a glContext, initialized by the renderer at startup. Math Set of math wrapper classes used for 3D calculations. Timestep Time-keeping interface that updates the time per frame. Component Interface that all critical game components derive from. Sender Interface that represents a component that can send data through the message system. Reciever Interface that represents a component that can receive data through the message system. 66 | P a g e
CAudio A singleton that is accessed by all components as needed. It is used to post sound events to the audio system. Data Structures Basic data containers used to orient and organize data.
67 | P a g e
68 | P a g e
Context Module Description Asset Factory Interfaces with all the storage containers and assembles new batches of assets that will be referenced by objects in the object manager. Asset factory requests new objects to associate when an asset request is made. Asset factory is sent requests by UserControl. BSP Storage class for collision data. Receives collision data from the Filestream. Accessed by the object manager in order to do collision checks against the worlds geometry. Asset Base class that all asset containers derive from. BluePrint Schematic class that holds instanced data used to represent an object. It is sent from Filestream to BlueprintStorage. Blueprints are passed from Blueprint storage to asset factory when objects are being assembled. ModelStorage Container class for all of the models loaded into the Engine. Receives model assets from the filestream. This classes data is instanced by blueprints. BlueprintStorage Container class for all blueprints loaded into the Engine. Receives blueprint assets from the filestream. CollisionSection Container class that holds a single set of collision data. These are sent from filestream to the BSP. They are used by Object Manager in collision checks. EffectStorage Container class for all of the effects loaded into the Engine. Receives effect assets from the filestream. This classs data is instanced by blueprints. TextureStorage Container class for all of the textures loaded into the Engine. Receives texture assets from the filestream. This classs data is instanced by blueprints. MaterialStorage Container class for all of the materials loaded into the Engine. Receives material assets from the filestream. This classs data is instanced by blueprints. ModelAsset Container class for models. Sent from Filestream to ModelStorage. EffectAsset Container class for effects. Sent from Filestream to EffectStorage. TextureAsset Container class for textures. Sent from Filestream to TextureStorage. MaterialAsset Container class for materials. Sent from Filestream to MaterialStorage.
69 | P a g e
User Control
Context Module Description User Control Manager For all states. Selects a particular state as its active state. Interfaces with Camera and Input. UserState Base class that all states derive from. Input Receives input from the user and translates for the appropriate active state. Camera Receives actions from the appropriate active state and repositions the camera in 3D space. GameState Manages loading and maintenance of level at runtime. Interfaces with the camera in order to position it in the scene. Makes calls to Asset Factory for new objects. Primary Menu State Manages the Main Menu and positions the camera appropriate to the menu position. Makes calls to the Asset Factory for new menu items. Pause State Manages the Pause Menu and positions the camera appropriate to the menu position. Makes calls to the Asset Factory for new menu items. Profile State Manages the Profile Menu and positions the camera appropriate to the menu position. Makes calls to the Asset Factory for new menu items. Cinematic State Manages the actors in the scene. Interfaces with the camera and any existing actors and positions them according to an animation. Makes calls to asset factory for new items.
70 | P a g e
Object Hierarchy
71 | P a g e
Name Initialize
Parameters
HINSTANCE hInstance, LPSTR lpCmdLine, int nShowCmd
Description Loads and initializes the window where everything will be displayed. It instantiates all core components and loads them into the core, where they will be managed during runtime.
Void
Execute
Void
Continuously updates the window, the elapsed time, and the core.
Void
Shutdown
Void
const W32Window&
GetWindow
void
Returns a reference
72 | P a g e
Core
Description The core is the central controller which initializes, updates, and shuts down all defined components within the engine. Components are modules that perform specific actions in the engine, and are loaded into the core at initialization. All modules that are to be managed directly by the core must derive from the Component interface. The core then locks the components in when initialization is complete, and begins the execute phase, which updates each component every loop. The time is also updated within core. The core can also receive error codes from executing components during runtime. Functions Return void
Name Initialize
Parameters void
Description Initializes all components that will be placed in the core, adds them to the cores component list, and starts the updating.
void
Execute
float fTime
Component*
GetComponent
bool
AddComponent
Component* pComponent
Adds a component to the cores component list. Returns false if the core is full or an error occurred.
void
Shutdown
void
Shuts down and deallocates all components currently held by the engine. 73 | P a g e
W32Window
Description This module provides a wrapper for the win32 setup required to get a basic win32 window for rendering purposes. It also possesses custom input calls for both keyboard and mouse with some double buffering support. The window supports both fullscreen and windowed mode, as well as it can switch states on the fly based on keyboard input. The window also possesses a few extra functions to handle idle and minimization issues. Return void Name Initialize Parameters HINSTANCE hInstance int nShowCmd void *WinP int nWidth int nHeight int nFullWidth int nFullHeight const char *szWindowName int nIcon void Description Declares a window but lets you actually initialize it in WinMain.
void
RefreshWindowAttributes
HWND int int int int int int int int int int bool bool bool
GetHWND GetCurrentX GetCurrentY GetCenterX GetCenterY GetWindowWidth GetWindowHeight GetFullWidth GetFullHeight GetCurrentWidth GetCurrentHeight IsMinimized IsWindowed IsIdle
void void void void void void void void void void void void void void
Refreshes the windows X, Y, Width, and Height for the current display mode. Accessor for HWND variable. Accessor for X variable. Accessor for Y variable. Accessor for CenterX variable. Accessor for CenterY variable. Accessor for Window Width. Accessor for Window Height. Accessor for Fullscreen Width. Accessor for Fullscreen Height. Accessor for current width that is being used(fullscreen/windowed). Accessor for current height that is being used(fullscreen/windowed). Evaluates true if the window is minimized. Evaluates true if the window is in windowed mode. Evaluates true if the window is minimized and sleeps for 1
74 | P a g e
bool
MinimizeOnLostFocus
bool bState
bool
IsKeyReleased
int nScanCode
bool
RightMouseButtonPressed
void
bool
MiddleMouseButtonPressed
void
millisecond. Specifies whether or not the window should minimize automatically if the window loses focus. Switches to windowed mode. Switches to fullscreen mode. Swaps between windowed and fullscreen. Manages the win32 message loop and returns false if the WM_QUIT message was posted. Posts Quit Message and shuts down the window. Refreshes the key buffers with the keyboard status. Checks to see if the key was down on the last update. Checks to see if the key was down on the last update in respect to double buffered input. Checks to see if the key was up on the last update in respect to double buffered input. Flushes the input buffers. Checks to see if the left mouse button is down. Checks to see if the right mouse button is down. Checks to see if the middle mouse button is down. Checks to see if the left mouse button is down in respect to double buffered input. Checks to see if the right mouse button is down in respect to double buffered input. Checks to see if the middle mouse button is down in respect to double buffered input. Accessor to the mouses x position. Accessor to the mouses y position. Accessor to the mouses x position in reference to the windows origin. Accessor to the mouses y position in reference to the windows origin. 75 | P a g e
Accessor to the mouses x position in reference to the windows center. Accessor to the mouses y position in reference to the windows center. Checks to see if the mouse is within the tBounds passed in.
76 | P a g e
GLContext3D
Description The GLContext3D module is responsible for initializing, managing, and shutting down any OpenGL related functionality. It allows for automatic resizing in real-time using the handle to the window passed by the W32Window module. Renderer has a reference to this module to get global OpenGL information.
Return HWND HGLRC float float float void void void void void
Name GetWindow GetContext GetPerspective GetNearPlane GetFarPlane SetPerspective SetNearPlane SetFarPlane SwapBuffer Initialize
Parameters void void void void void float fPerspective float fNear float fFar void HWND pWindow float fPerpsective float fNear float fFar int nWidth int nHeight void
Description Accessor to the HWND variable. Accessor to the HGLRC variable. Accessor to the Perspective variable. Accessor to the Near Plane variable. Accessor to the Far Plane variable. Sets the Perspective to the passed in float. Sets the Near Plane to the passed in float. Sets the Far Plane to the passed in float. Swaps the current render buffer. For double buffering. Initializes the GLContext3D using the passed in variables to setup our OpenGL window. Resizes the window according to the width and height parameters. Shuts down the window and releases all dynamic memory.
void void
Resize Shutdown
77 | P a g e
Overarching Interfaces
Component
Description Component is the base interface that all modules in the Core derive from. Components are generally updated by the engines core, and send messages to the Core based on run-time conditions. Components can store a direct pointer to the global time held by the engine. Component derives from the Hub and TimeDependent interfaces. Functions Return void
Name Initialize
Parameters void
void
Execute
void
void
Shutdown
void
Description This initializes the component. This function must be overridden in the child class. This executes internal code held by the component. This function must be overridden in the child class. This shuts down the component and deallocates any remaining data. This function must be overridden in the child class.
ProcessData
void
78 | P a g e
Sender
Description The Sender interface allows the derived object to send larger chunks of data to specific objects. Senders can only send to objects that derive from the Receiver interface. Data sent must be contained in a structure or class that derives from the Transmissible interface. Senders possess a list of contacts, or specific entities that they can send to. To send data, the sender merely needs to call the SendData function. Functions Return void
Name AddContact
Receiver *
GetContact
uint nContact
void
SendData
void
ClearContacts
void
Description Adds the Receiver pContact to the list of Receivers. Accessor to the Receiver at index nContact in the list of Receivers. Sends the data pData to the Receiver at index nContact inside of the list of Receivers. Clears the list of Receivers.
79 | P a g e
Receiver
Description The receiver module is an interface class that works alongside the sender class, receiving any data that sender may have sent. Receiver contains an input queue where it holds the data it has received. Functions Return void
Name ReceiveData
Description The pData pointer is filled by the incoming data sent by a sender class, and is then pushed onto the input queue.
void
ProcessData
void
Handles any data that may have been sent to the Receiver. This function is pure virtual and is intended to be overridden to suit the specific needs of the derived class.
80 | P a g e
Object Hierarchy
Object
Description The Object class is the base object that all objects in the object hierarchy derive from. It sets down basic object implementation, and provides the bare minimum functionality that all objects should have. Functions Return VMatrix4*
Name GetTransform
Parameters void
Description Returns a pointer to the transform. Updates the transform. Returns a constant pointer to the Bounding Volume. Sets the bounding volume. Returns the type of object by ID.
void
Update
float fTime
const BoundingVolume*
GetBVolume
void
void
SetBVolume
BoundingVolume*
int
GetType
void
81 | P a g e
TriggerVolume
Description This module is a derivative of the Object class and the Activator interface. It is a collision volume with an associated trigger, which activates an object on intersect with the player. This can be used to trigger other objects such as traps, effects, and cinematics. Functions Return void
Name SetVolumeType
VolumeType void
GetVolumeType Update
Description Sets what kind of trigger this volume activates. Accessor to the VolumeType. Updates Object and Activator data.
Prop
Description A prop represents a static object in the scene. It contains the transform for the object it represents, as well as a general collision volume for collision checking with other objects and the world. RenderableObjs generally reference this object as its initial transform when rendering their data. Functions Return void
Name Update
82 | P a g e
Rope
Description Ropes, which are activated by the context-sensitive input given by the player, and transition the player into a swinging state, suspended from the object in the scene. As such they are defined in our object hierarchy as interactable props. Functions Return void
Name Update
Description Updates the state of the swingable object. Transitions the player into a swinging state and attaches them to the object.
void
Use
void
83 | P a g e
I/O
FileStream
Description The Filestream is the module used to load any object into the game. Any external data, such as models, textures, and scripts, go through the file stream. They are then distributed to the appropriate storage system for the respective asset type. The FileStream possesses two modes, full load and streaming. In the full load state, the FileStream hogs all processing in order to get the data loaded in as quickly as possible. In streaming mode, the data is loaded in gradually using the Threadpool system without interrupting gameplay.
Name Initialize
Parameters void
Description Initializes the filestream for loading. Handles any current operations of the filestream. Releases all local data and readies the system to be unloaded. Loads a file from the root Resource directory. Loads in all models associated with the root path passed. Loads a tree of models. Loads in all textures associated with the root path passed. Loads a tree of textures. Loads in all animations associated with the root path passed. Loads a tree of animations. Loads in all blueprints
void
Execute
void
void
Shutdown
void
void
LoadFromFile
void
LoadModel
void
LoadTexture
void
LoadAnimation
void 84 | P a g e
LoadBlueprints
Receiver** pReceiver
CWord tRootBlueprint
associated with the root path passed. Loads atree of blueprints. Returns whether or not the filestream is currently streaming. Sets whether or not the filestream is current streaming.
Bool
IsStreaming
void
void
IsStreaming
Bool bState
85 | P a g e
Threadpool
Description Threadpool uses the windows threadpool api to create a threadpool of idle threads and passes it WorkItems, which are defined as load functions for engine assets. Threadpool contains items that have callback processes defined, which indicates which load function the thread will call. This allows our system to streamline asset loading without interfering with the games performance. Functions Return void
Name Initialize
Description Creates a threadpool of nNumThread count threads. If -1 is passed in it will assign an optimal amount of threads. If it cant assign as many threads as are requested, a notification will be sent to core. Checks the input queue of work items for work waiting to be done, then looks through the output queue for work that has been completed so that the data can be passed off to the game. Removes all work that hasnt been processed yet, and releases all of the threadpools threads. Takes in a workitem, and adds it to the threadpools input queue so that it can be processed. Creates a workitem out of the data passed, then adds it to the input queue.
void
Update
void
void
Shutdown
void
void
AddWorkItem
WorkItem
void
AddWorkItem
86 | P a g e
Mesh
Description The mesh structure holds all of the 3D rendering data related to a particular piece of a model. The data contained is a vertex buffer, index buffer, normal buffer, and uv buffer. This structure is generally contained within a model class. Return Vector3* Name P_mVertexBuffer Parameters Description Contains all relative Vertex information to represent the mesh.
Vector3*
P_mIndexBuffer
Vector3*
P_mNormalBuffer
Vector3*
P_mUVBuffer
Bool
LoadMesh
void
Clear
void
87 | P a g e
Model
Description This defines a structure that contains the information necessary for an in-game 3d entity. This structure holds the framework for a renderable entity, and contains the skeleton used for animating this object. These are stored in the Model Storage class, and are referenced by objects being drawn by the Renderer. Members Return unsigned int
Name n_mNumMeshes
Description The number of meshes that make up this model. The meshes contained by this model object. The skeleton of this object used for animation and skinning. Clears out the model of all of its contained data.
Mesh*
p_mMeshes
Skeleton*
p_mSkeleton
Clear
void
88 | P a g e
Texture
Description Texture is the base class in the Texture Hierarchy. It contains the base information shared by all textures that can be loaded. As for loading functionality, it is derived from in order to add specific loading code for a particular format. It is used in conjunction with the GLTexture class in order to bind OpenGL handles for texture information. Functions Return
Parameters
Description A buffer to hold the names of the textures. The data member to represent the format of the texture. The data member to mark the internal byte format of the texture. The data member used for the height of the texture. The data member used for the width of the texture.
uint e_mFormat
uint n_mInternalFormat
int n_mHeight
int n_mWidth
virtual bool
Load
Pure Virtual Function, must be overridden in order to supply texture loading code. Will deallocate all of the texture data contained within.
Void
Clean
void
89 | P a g e
TGAInterface
Description This interface only has the loading code for TGA's, which allows you to splice TGA loading code into any existing texture type regardless of the API you are using(OpenGL/DirectX). Functions Return bool
Name LoadTGA
Description Takes in all the pointers and will load in that specific TGA.
Example Usage TGAInterface is spliced with the Texture class in order to yield the TGATexture class. This class can load in a TGA texture file, and then up-caste to the Texture class. Now data from the TGA can be interpreted as raw texture data, instead of just TGA data. Texture* pTGA = new TGATexture(pFilePath); Module Author Grant Landreth
90 | P a g e
PNGInterface
Description This interface only has the loading code for PNG's, which allows you to splice PNG loading code into any existing texture type regardless of the API you are using(OpenGL/DirectX). Functions Return Bool
Name LoadPNG
Description Loads a PNG file from the specified path (pPath) into the pTexture Texture pointer.
Example Usage PNGInterface is spliced with the Texture class in order to yield the PNGTexture class. This class can load in a PNG texture file, and then up-caste to the Texture class. Now data from the PNG can be interpreted as raw texture data, instead of just PNG data. Texture* pPNG = new PNGTexture(pFilePath); Module Author Dan Southard
91 | P a g e
GLShader
Description The GLShader structure contains the loading code for OpenGL shaders, as well as a handle to a shader. GLShader also contains functionality for binding and unbinding the shader it has a handle to. The clean function takes care of the cleanup for its shader. Functions Return Void
Name BindShader
Parameters void
Description Binds the shader to the graphics card. Unbinds the shader from the graphics card.
Void
UnbindShader
void
Bool
Load
const char*
pVertex
Loads the Vertex Shader and Fragment Shader from the given file paths.
// Fragment Shader Path Bool LoadSource const char* pVertexCode Loads and Compiles the actual source code for the shader.
// Fragment Shader Code Void Module Author Grant Landreth Clean void Cleans up the shader.
92 | P a g e
Storage
Asset Factory
Description AssetFactory handles the creation and distribution of the games assets. AssetFactory has an array of schematics that it uses to create objects. Requests for objects are sent to the factory by other components, whereby the AssetFactory creates the object using a given index into the schematic array. AssetFactory then sends out the newly created objects to the object manager, where the y will remain during the course of their lifetime. Functions Return void
Name Initialize
Parameters void
Description Initializes the Asset factory. The meat and bones of the asset factory. Asset creation would occur here. Cleans up the Asset Factory. Handles any data that may have been sent to the Asset Factory. Using an index into an array of schematics, the Asset Factory creates an object. Takes in a model storage to use as a reference for model data. Takes in a texture storage to use as reference for texture data. Takes in an animation storage to use as reference for animation
void
Execute
void
void
Shutdown
void
void
ProcessData
void
Object*
CreateObject
void
SetModelStorage
ModelStorage*
void
SetTextureStorage
TextureStorage*
void
SetAnimationStorage
AnimationStorage*
93 | P a g e
data.
void
SetBlueprintStorage
BlueprintStorage*
94 | P a g e
EffectStorage
Description The EffectStorage class holds all the effects data. Effects data is sent directly from the I/O section of the engine in the form of EffectAssets. Handles to this data can be requested from the EffectsStorage class, and then utilized externally for rendering purposes. Functions Return void
Name Initialize
Parameters void
Description Starts the process and initializes any data that is needed for this class to run. Retrieves pending data from the input queue a places it in local storage for later use. Shuts down any data that was used by, or initialized by this class. Returns a constant pointer to a stored effect for external reference. Moves pending effects from the input data queue and performs any needed manipulation on it. Called from Execute.
void
Execute
void
void
Shutdown
void
Const Effect*
GetEffect
Uint nEffectID
void
ProcessData
void
95 | P a g e
CollisionSection
Description This structure holds a list of triangles relevant for collision checking. Functions Return void
Name SetTriangles
Description Assigns triangles passed in to this collision section. Returns the triangles of the collision section. Sets an Objects y coordinate to the position to a triangle if it collides. Start the line segment from vIn and return a collision point, vOut, if there is collision. Checks collision against the bounding volume and all triangles in collision section.
const Triangle*
GetTriangles
void
bool
ClampObjectTo
Object *pObj
bool
ClampVecTo
bool
CheckCollision
96 | P a g e
BSP
Description BSP subdivides our world geometry into sorted sections to allow for quick indexing, sorting and collision checking with our objects. The BSP data is generated by a pre-processor tool that takes in our exported scene data from Maya and generates splitting planes and collision data for the geometry. We can index into the BSP geometry based on its proximity to our object that we are checking collision. This allows us to cull unnecessary collision detection checks thus speeding up our game loop. Functions Return const CollisionSection*
Name GetCollisionSection
Description Returns a section of the BSP local to the bounding volume passed in, on NULL it will start at beginning. Returns a section at the BSP index passed in. Pulls any data off of the input data queue and gets it ready for execution. Gets the BSP data loaded in locally and readies the BSP for processing. Gets data needed for processing collision volumes and prepares for collision checking. Shuts down and deinitializes all of data contained within. Adds a collision section to the BSP. Clears out the BSP.
const CollisionSection*
GetCollisionSection
int nIndex
Void
ProcessData
void
Void
Initialize
void
Void
Execute
void
Example Usage In order to check for collisions, one must pass a pointer to the object being checked. In order to search the BSP, the pointer is passed into the GetCollisionSection function, which returns a pointer to the next closest set of triangles to the object. Repassing the same collision pointer will iterate to the next closest collision section. Module Author Dan Southard
97 | P a g e
AnimationStorage
Description This class is used for updating and storing Animations. The class iterates through a list of Animations, updating and removing them as necessary. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. The class iterates through a list of models, updating them, or removing them at the end of their lifetime. Frees any memory that may have been allocated during the life of the class. Returns an Animation from an array of models at index nAnimationD The class sorts through data sent to it, such as models. Adds animation to the storage and assigns a unique id. Removes animation from storage based on the nID. Clears out the storage container of all animations.
void
Execute
void
void
Shutdown
void
Const Animation*
GetAnimation
uint nAnimationID
void
ProcessData
void
void
AddAnimation
Animation *pAnimation
void
RemoveAnimation
uint nID
void
ClearStorage
void
98 | P a g e
Blueprint
Description The blueprint holds constant handles to all of the data held by other storage containers required for drawing any object in the game. Each blueprint is a schematic for the assembly of the object specified. These are used by the AssetFactory in order to create instances used at run-time. Members Type int
Name n_mAnimationSetID
Description An index into the animation storage for what animation this object uses if applicable. ID of the blueprint Pointer to a model. Pointer to a texture. Pointer to a set of animations.
unsigned int const Model* const Texture* const AnimationSet* Module Author Grant Landreth
99 | P a g e
BlueprintStorage
Description This class stores all of the blueprints needed for making any object in our game world. Blueprints can be used for assembling an object for rendering. Blueprint storage gets initialized last because of its dependencies on pointing to other systems data. Functions Return const Blueprint*
Name GetBlueprint
Description Returns the data attached to that blueprint so that the data can be used for another object instance. Pulls any data from the input data queue and gets it ready for execution. Gets the blueprint data loaded in locally and readies the storage for use. Checks to see if any blueprints have been received from the I/O component, and stores them in the asset banks. Ends the blueprint storage system and gets rid of all of its local data. Clears the storage of Blueprints. Adds the Blueprint to the storage.
void
ProcessData
void
void
Initialize
void
void
Execute
void
void
Shutdown
void
ClearStorage AddBlueprint
100 | P a g e
TextureStorage
The texture storage class holds texture assets that have been loaded by the I/O module. Textures loaded in I/O are sent to the TextureStorage component as TextureAssets. TextureStorage returns constant handles to the texture data when it is requested by the AssetFactory during object fabrication. These texture handles are then used by the RenderableObjs in the Renderer. Description Return void
Name Initialize
Parameters void
Description Will initialize all the internal data in the storage component. Will perform any updating code relating to organizing the textures contained. Will deallocate any texture handles currently held by the storage component. Returns a GLTexture* at the specified index in the storage component. Retrieves data from the input data queue and preps it for storage. Clears the storage container of Textures. Adds a texture structure to the storage container.
void
Exectue
void
void
Shutdown
void
const GLTexture*
GetTexture
uint nTextureID
void
ProcessData
void
void
ClearStorage
void
unsigned int
AddTexture
101 | P a g e
ModelStorage
Description This class is used for updating and storing models. The class iterates through a list of models, updating and removing them as necessary. It receives newly loaded models from the I/O module in the form of ModelAssets. It returns constant handles to model data during the fabrication of a new object in the Asset Factory. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. The class iterates through a list of models, updating them, or removing them at the end of their lifetime.
void
Execute
void
const Model*
GetModel
uint nID
Returns a model from an array of models at index nID. The class sorts through data sent to it, such as models. Clears the storage container of all Models. Adds a model structure to this storage container. Removes a model structure at the index nID.
void
ProcessData
void
void
ClearStorage
void
int
AddModel
ModelAsset *pMod
void
RemoveModel
102 | P a g e
CAudio
Description A class used for storing and playing sounds. The class reads in sounds from external files. It is sent events, denoted by long integer handles, which signify what sound event to play. It then posts the event, which plays the sound from a list of sounds relating to the event. The Effects class directly interfaces with this system, generally triggering sound effects as other effects are fired from the class. Functions Return void
Name Execute
Parameters void
Description The class plays, ends, and modulates sounds as needed. Posts an event. If a matrix is passed in, attaches the event to that position. Registers an object with the sound engine for sounds to be positioned. Removes an object from the sound engines object list. Sets a groups switch case to the passed in state.
void
PostEvent
void
RegisterGameObj
void
UnregisterGameObj
VMatrix4 *pTransform
void
SetSwitch
void
SetRTPC
103 | P a g e
Processing
ObjectManager
Description This class updates and stores objects. Objects are created in the AssetFactory, and then sent to the object manager to be updated for the duration of their life. The manager iterates through its stored objects, updates them, then removes and deletes objects when they are no longer needed. It is also responsible for perform collision checks on all objects currently contained. It interfaces with the BSP in order to get world collision data to test against. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. The objectmanager will sort through its list of objects, updating and deleting as needed. Adds an object to the classs list of objects. Removes the object from the list and deletes it. Removes the object from the list and deletes it. The objectmanager sorts through data sent to it, such as new class objects.
void
Execute
void
void
AddObject
Object* pObject
void
KillObject
Object* pObject
void
KillObject
VMatrix4* pObject
void
ProcessData
void
104 | P a g e
GeometryProcessing
Description This class contains a list of Renderable Objects. It sorts through the list of objects and passes geometry that should be visible to the Renderer so that it can be displayed to the screen. This class removes objects that are behind the player or out of view so that they do not get rendered for optimization. This class interfaces with the camera, BSP, and other culling systems in order to properly sort the array of renderable objects accordingly. Functions Return const Camera*
Name GetCamera
Parameters void
Description Returns a pointer to the Camera object. Sets the camera to the object passed in. Initializes and data the class needs to run. Returns a model from an array of models at index nModelID Adds a renderable object to a list of objects to be processed. Removes a renderable object from a list of objects. Removes a renderable object from a list of objects. Sets the renderer pointer to pass Geometry data.
void
SetCamera
void
Initialize
void
const Model*
GetModel
uint nModelID
void
AddRenderables
RenderableObj* pObj
void
RemoveRenderables
RenderableObj* pObj
void
RemoveRenderables
VMatrix4* pOrientation
void
SetRenderer
105 | P a g e
Interpolator
Description Iterates through the frames of a bound animation and interpolates between the transforms based on time and distance in the animation. These interpolations are applied to the bound skeleton. Functions Return float
Name GetAnimationSpeed
Parameters void
Description Returns the speed at which the animation is playing. Returns a constant pointer to the Animation. Returns a pointer to the Skeleton. Sets animation speed. Sets up the interpolator on a new animation and skeleton. Resets the iterator and rebinds the animation. Updates and interpolates the animation data and applies it to the target Skeleton based on time. Performs a matrix interpolation on the given inputs based on the fInterp value. Clears the interpolator.
const Animation*
GetAnimationPtr
void
Skeleton*
GetSkeletonPtr
void
void void
SetAnimationSpeed Initialize
void
Reset
void
void
Update
float fElapsed
VMatrix4
InterpolateMatrix
void
Clear
void
106 | P a g e
AnimationProcessing
Description This class contains a list of currently executing Animations in the game. It updates Animations that are in the list, and removes animations that are no longer being utilized by an object in the scene. Functions Return void
Name Initialize
Parameters void
Description Initializes and data the class needs to run. Sorts through its list of Animations, calling update on them and removing animations that are not needed. Frees any memory that may have been allocated during the life of the class. Processes data from the received data queue. Clears the processors data. Adds the AnimationControl to the queue of animations. Removes an AnimationControl by pointer. Removes an AnimationControl by index.
void
Execute
void
void
Shutdown
void
void
ProcessData
void
void
ClearProcessor
void
AnimationControl* AddAnimationControl
AnimationControl *pAnimations
void
RemoveAnimation
void
RemoveAnimation
107 | P a g e
EffectsProcessing
Description This module is plugged directly into the Core and manages the currently active effects in the scene. It initializes all data involved with effects and updates the common data contained by them. It contains an active list of effects in the scene, and dynamically adds and removes effects based on internal and external input. It derives from the Component and Hub interfaces. Functions Return const Camera* void void void
Description Accessor to the Camera. Sets the camera of the module to the passed in pCamera. Initializes the module. Executes common update code for effects. Called once per frame. Shuts down the module. Adds the pObj to the list of effects contained in the module. Removes an effect in the list by object pointer. Removes an effect in the list by its orientation matrix.
108 | P a g e
Rendering
Renderer
Description This module is responsible for drawing renderable objects to the screen. This class keeps a list of renderable objects and an array of RenderCodes. Renderable objects are rendered via the RenderCodes in the array, or a default RenderCode if no function is specified. Generally, Renderer has a reference to the Geometry Processor, where all of the renderable data is sorted before it is rendered. Functions Return const RenderCode&
Name GetRenderCode
Description Returns a RenderCode from an array at index nFunc. Returns the openGL context currently available. Sets the default render information for renderer. Sets the default render information for renderer to the RenderCode in the array at index nFunc. Adds a render object to a list of RenderCode. Returns the index of the array it is stored at. Searches through the list of RenderCodes for one matching the name passed in. Returns the index it is stored at or -1 if not found.
GLContext3D&
GetContext
void
void
SetDefaultRender
RenderCode fpDefault
void
SetDefaultRender
uint nFunc
int
AddRenderCode
int
FindRenderCode
109 | P a g e
void
Initialize
void
void
Execute
void
Checks through the array of renderable objects and calls their respective RenderCode. Frees any memory that has been allocated during the classs lifetime. Begins a Renderer scene.
void
Shutdown
void
void
Begin
void
void
End
void
void
Render
void
Render
Renders the object passed in with the RenderCode stored at index nFunc. Renders the object passed in with RenderCode pFunc. Ignores the pObjs RenderCode and instead calls the default RenderCode.
void
Render
void
RenderDefault
110 | P a g e
Effect
Description This object stores data necessary to replicate effects. Because this is the base class, it only carries with it base functionality. It possesses an ID that allows it to request a particular EffectCode in the Renderer. The Effect class is overridden in order to gain more functionality. Functions Return void
Name Update
RenderCode
Description This module is a structure that contains a function pointer relating to rendering. This function pointer is associated with an ID, which is utilized by the Renderer as a way to associate certain objects with certain render functions. Render functions are prewritten, and then passed into RenderCodes, which are then loaded into the Renderer. Inside the Renderer, RenderCodes are specified by the objects passed in via ID, and then operate on these objects in order to render their contents. Functions Return static uint
Name GenerateID
111 | P a g e
RenderableObj
Description This interface relates to the rendering data required by the renderer. RenderableObjs are created by the AssetFactory, and are passed to the Geometry Processing module for containment. When in the GeometryProcessing component, these RenderableObjs are sorted and batched to the Renderer, where they are rendered based on the data they contained. Because this is the base class of the renderable hierarchy, this class only contains an ID as to which RenderCode it will use, and a transform to represent it in world space. Child types derived from this class can contain information such as model, texture, material, shader, or effects data. Members Type int
Name n_mRenderFunc
Description Specifies which RenderCode this object will request when it is rendered by the Renderer. The pointer to the transform held by this RenderableObjs respective Object in the ObjectManager.
const VMatrix4*
t_mTransform
Example Usage RenderableObj can be derived into a new class called VertexRenderableObj, which contains a vertex buffer pointer that can be used to batch a set of triangles. When the VertexRenderableObj is passed to the Renderer, it would request a specific RenderCode such as VertexRenderCode via an ID. The object would then get passed into this function pointer, caste to a VertexRenderableObj from a RenderableObj, and then operated on. Module Author Grant Landreth
112 | P a g e
User
UserControl
Description The UserControl class is a sub-core for all of the user input management. It toggles the current state that the user is in, and manages certain specifics about camera control, cinematic, and user input. It is the primary controller for how the user should interact with the program at any given state. Functions Return Input*
Name GetInput
Parameters void
Description Gets a pointer to the current input object. Returns a pointer to the camera object. Gets the current active state for any reference purposes. Gets a pointer to a UserState that is at the passed in index. Sets the current state to the one at the passed in index. Sets the UserState at the specified index to the passed in UserState. Initializes any dynamic memory objects that are used and sets up the class to be able to run. Runs the updates for any stored data. Releases any used dynamic memory and ending any objects that were stored. Processes data in the
Camera*
GetCamera
void
UserState*
GetCurrentState
void
UserState*
GetUserState
int nIndex
void
SetCurrentState
int nIndex
void
SetUserState
void
Initialize
void
void
Execute
void
void
Shutdown
void
void
ProcessData
void
113 | P a g e
received data queue. void void SetInput SetCamera Input *pInput Camera *pCamera Sets the input pointer. Sets the camera pointer.
Frustum
Description A class used in frustum testing to cull out polygons that are not within view of the player. Contains functions used which test intersections with spheres, AABBs, and cylinders. Functions Return const Plane*
Name GetPlanes
Parameters void
Description Returns planes that will be used in checking intersection with polygons. Tests intersection of pSphere with the frustum. Returns true if the sphere is within or intersects with the frustum. Tests intersection of pAABB with the frustum. Returns true if the AABB is within or intersects with the frustum.
bool
TestSphere
bool
TestAABB
114 | P a g e
Camera
Description This class is used to find information the player should view. The objects rendered on the screen are relative to the cameras position and rotation. The camera will follow the player, but is able to be moved in certain circumstances by the user. The camera is still an object, and can collide with other objects. Camera uses a soft attach system, and is fed commands relating to movement from external systems. This allows the cinematic systems, player character, and world environment to control the camera in the same manner. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. Sorts through data sent to it from a sender. Will include information about its next action. Returns a pointer to the cameras transform. Sets a soft attach Boolean. Returns a pointer to the soft attach queue. Returns a pointer to cameras receieved data queue. Applies the cameras transform.
void
ProcessData
void
VMatrix4*
GetTransform
void
void
SetIsSoftAttached
bool bIsAttached
Queue<VMatrix4>*
GetSoftAttachQueue
void
Queue<Transmissible*>*
GetCameraEvents
void
void
ApplyCamera
void
115 | P a g e
Input
Description The Input class possesses a queue that is directly accessed by the UserState contained in the UserControl class in order to gain the current input. The user input is pushed on the queue during the execute phase. There is also an action map stored within the input wrapper that translates the data based on preset user input preferences before it is pushed on the queue. Functions Return Queue<InputEvent*>*
Name GetInputQueue
Parameters void
Description Returns a pointer to the input queue, allowing the user states to hook up to this class and retrieve input when they are enabled. Starts the program and initializes any memory that is used. Moves all input data into the queue and processes any pending input. Shuts down the file and deinitializes any data. Processes the data in received data queue. Sets the window.
void
Initialize
void
void
Execute
void
void
Shutdown
void
void
ProcessData
void
void
SetWindow
SetCurrentState
116 | P a g e
CinematicState
Description CinematicState is one of the possible states that the UserControl class can assume. The cinematic state stores a sequence of actions per each actor in the current scene. When an cinematic event is triggered in-game, the UserControl switches to the CinematicState and locks input for the user. The CinematicState then begins feeding actions to all of the actors in the scene via the Sender interface, emulating a cut scene. Functions Return void
Name Initialize
Parameters void
Description Initializes the state and prepares it for utilization. Plays the cinematic and is responsible for sending actions to the camera and the player. Clears the cinematics local data.
void
Execute
void
void
Shutdown
void
117 | P a g e
ProfileMenuState
Description At this menu, the user is able to select a profile to load, create a new profile, and delete old profiles. When a selection is made from this menu, the I/O module is notified and a new profile is created/loaded/deleted from disk. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. Uses data sent to update the state the user is in on the menu. Frees any memory that may have been allocated during the life of the class. Parses data sent to it from other classes so it can be used.
void
Execute
void
void
Shutdown
void
void
ProcessData
void
118 | P a g e
GameState
Description Gamestate contains any data needed for the game to be played. It contains information on the location of the player, profile data, and transforms of the camera. From here the user would interface with the camera and player character, and would interact with the game world. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. Updates relevant game data such as the player and camera positions. Frees any memory that may have been allocated during the life of the class. Processes data from the received data queue. Handle input. Resets the game variables. Update the players variables. Win the game! Lose the game! aw
void
Execute
void
void
Shutdown
void
void
ProcessData
void
void void
ReceiveInput Reset
void void
void
UpdatePlayer
void
Win Lose
void void
119 | P a g e
PauseMenuState
Description The state that manages the submenu of GameState when the player pauses the game. It contains information about the current state of the menu, such as the users selection. PauseMenuState would be accessed when the player presses the pause button. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. Updates menu information such as the currently selected menu options. Frees any memory that may have been allocated during the life of the class.
void
Execute
void
void
Shutdown
void
120 | P a g e
PrimaryMenuState
Description This menu represents the primary main menu seen by the user at application startup. It is the main hub by which all other game menu components are accessed. Options such as the ProfileMenuState, options menu, and start game would be accessed here. Functions Return void
Name Initialize
Parameters void
Description Initializes data that the class needs in order to run. Updates menu information such as the currently selected menu options. Frees any memory that may have been allocated during the life of the class. Processes data from the receive data queue. Handles input. Reset the menu states variables.
void
Execute
void
void
Shutdown
void
void
ProcessData
void
void void
ReceiveInput Reset
void void
121 | P a g e
Menu
MenuControl
Description This interface is the base class for all controls that are involved with the menu. It contains the base function set required by all menu objects in the hierarchy. It performs no useful functions, and cannot be placed directly into the menu system. Derived types inherit from this interface as to streamline data management and MenuControl passing in the actual menu system. Functions Return int
Name GetControlType
Parameters void
void
Update
void
Description Accessor for the type of control that is currently deriving from the base object. Pure Virtual function. Overriden in the child class if the specified control requires an update.
122 | P a g e
Container
Description The Container interface grants the ability for a MenuControl to contain a list of sub-controls within itself. The additional functions gained through inheritance are aimed at managing, adding, and deleting controls from the container. Functions Return void
Name AddControl
Description This allows you to add a control to your container. This allows you to remove a specific control from your container. This allows you to remove a specific control out of the queue based on the address passed in. Get control will return the specific control out of the queue based on an index passed. Updates all of the contained controls.
void
RemoveControl
MenuControl* pControl
void
DeqeueControl
MenuControl* pControl
MenuControl*
GetControl
int nIndex
void
ProcessControls
void
void
Clear
void
123 | P a g e
Image
Description A panel that displays a texture on a quad. Functions Return void
Name SetImage
Description Will set the Image to an ID specific to this image. Will return the specific Image ID
int
GetImage
void
124 | P a g e
Image List
Description The Imagelist is derived from the Image class, and overloads the default behavior of image by adding an array into the operation. Now you can pick the current image off of a list of images. This is useful for setting a particular state based on the image necessary to convey the state. An example, buttons would possess two states, a pressed and depress state, which would be represented by an imagelist. Functions Return int
Name GetNumImages
Parameters void
Description Will return the total number of images in the array. Sets an image based on the index and the ID. Will get the image in the array based on the index passed in. Will set the current background of the Image based on the index.
void
SetImage
void
GetImage
int nIndex
void
SetCurrentlyDisplayedImage
int nIndex
125 | P a g e
2DAnimation
Description The 2dAnimation class derives from the ImageList class, but overloads the functionality somewhat by flipping between each image at a regular interval. It also works similarly to the component model by storing the float pointer to the global time. That way, all of the interfaces don't have to be dirtied by the excessive and needless float passing when this class is the only one that needs time factored into its update. Functions Return Void Const Float*
Description Sets the length of the animation Returns the length of the animation.
Void Float
SetSpeed GetSpeed
Float Void
fTime
Sets the speed of the animation. Returns the speed of the animation Updates the animations time, frames, and speed.
Void
Update
Void
PictureBox
Description This class utilizes the functionality of a panel with the addition of a background image. It derives from the Panel class and the Image class in order to gain this functionality. It is functionally no different from the Panel class. Functions Return void
Name Update
Parameters void
126 | P a g e
Interactive Control
Description The Interactive Control class denotes that this control can be interacted with by the user. It serves as a base class that all interactive controls derive from. It contains a pure virtual function called Activate which derived controls will override with their own specialized behaviors. Interactive Control also has a value variable whose purpose is dictated by a derived control, for example a buttons value would either be on or off. Functions Return int void void
Description Returns the value of the control. Sets the value of the control. A pure virtual function that derived classes will override with their own specialized behaviors.
127 | P a g e
Progress Bar
Description Progress Bar is derived from both InteractiveControl and ImageList. What separates Progress Bar from any other InteractiveControls is the way it overloads its Activate function. When activated, Progress Bar will perform functionality related specifically to providing a visual representation of progress. Progress Bar uses the functionality inherited from ImageList to visually demonstrate progress. Progress Bars will most commonly be used to represent loading bars in our game. Functions Return void
Name Activate
Parameters void
Pressable Button
Description Pressable Button is derived from both InteractiveControl and ImageList. What separates Pressable Button from any other InteractiveControls is the way it overloads its Activate function. When activated, Pressable Button will perform functionality related specifically to a button. Pressable Button uses the functionality inherited from ImageList to visually demonstrate the fact that it has been pressed. Pressable Buttons will most commonly be used to transition from menu related states. Functions Return void
Name Activate
Parameters void
Description Performs the functionality related specifically to a button, changing states for example. Update the button. Check for intersection.
void bool
Update PointIntersect
void
ProcessData
void
128 | P a g e
Slider
Description Slider is derived from both InteractiveControl and ImageList. What separates Slider from any other InteractiveControls is the way it overloads its Activate function. When activated, Slider will perform functionality related specifically to a sliding bar. Slider uses the functionality inherited from ImageList to visually demonstrate the fact that a slider is moving along a bar. Sliders will most commonly be used to modulate both volume and gamma. Functions Return void
Name Activate
Parameters void
Description Performs the functionality related specifically to a Slider, changing the games music volume for example.
129 | P a g e
Memory Map
This memory map outlines the total memory usage expected at runtime. RAM usage is based in loading assets and holding CPU side game data. VRAM data is mostly texture and model data, with some shader code and material data for lighting calculations. RAM(128MB) 2MB executable 64MB level data 16KB scripting data 2MB object blueprints 2MB animation data 4MB gameplay assets 38MB threading 4MB sound banks VRAM(256MB) 12MB model data 24MB texture data 32KB shader code 2MB material data
Integration Plan
Alienbrain will be our source control of choice on this project to help maintain code concurrency and unification. Interfacing with source control will follow a specific rule set outlined here. Team members are allowed to check out as many files as necessary to complete their assigned task. No one is allowed to check out a file that is already checked out by another team member. Checkout and Checkin comments will be enforced for major changes, such as new functionality added to the pre-existing base. No member of the team is allowed to leave a meeting with a file checked out. Members may check out files after returning home from a meeting and may resume work at home. Integration is allowed for components that are functional in a local test application or base. No compiler errors and warnings will be tolerated for submission. Integration will be handled by the relevant lead after a component is completed and reviewed according to the Code Review plan. Time will be allotted on the schedule to the relevant leads to allow for integration time. When a critical error is found in the current build, the entire team will be notified of the error. If the error is identified outside of a meeting, it will be discussed immediately at the next meeting. All relevant development on the current code base will halt, and attempts to solve the problem will be made by any team member working on code relevant to the error. Within the time frame of one meeting after the identification of the critical error, if the error cannot be resolved, then a rollback to the previous working version will be called for.
131 | P a g e
Testing Plan
Our internal producer/quality assurance lead will handle management of the bug database for our team. He will assign quality assurance tasks to team members based on bug classification and relevant team members. For example, bug relating to loading code will be distributed to the tech team based on availability. As bugs are identified, they will be added to the database of bug reports, and a weekly bug review will be performed by the quality assurance lead. Bugs will be addressed based on priority. Critical bugs will be worked on immediately, while less-critical bugs will be resolved during code freeze. Rank A bugs will be worked on until resolved. Rank B bugs will be worked on for three to five days at a maximum. Rank C bugs will be pushed off until the polish stage.
Rank A Behaviors that limit the functionality of the engine and hinder development and testing. Ex: Crashes or buggy assets Rank B Instances where systems are not behaving properly and require further inspection. Ex: Erroneous physics or collision checks Rank C Aesthetic bugs or errors that have no impact on game play. Ex: Missing textures or glitchy lighting
132 | P a g e
133 | P a g e
134 | P a g e