Ghosts on a
The Ghosts on a Plane team has made several leaps forward between this milestone and the last one. The first things you notice when starting the game is our advanced GUI system and bopping sound system. The GUI system is extremely flexible and allows for a wide variety of different screens, from menus to the actual game screen. Buttons can be created and placed anywhere on a GUI page, and can be aligned to certain positions. The audio system uses OpenAL to play "Thriller" in the background in order to get the player in the mood. In the final demo, several sound effects will be included in the game to let the user know what's happening in game. If you cannot hear the audio, please install OpenAL by executing "OpenALwEAX.exe" in the "build/OpenALRedist" folder. When the user selects "start", the game begins.
The game begins with a smooth camera movement which gets the player oriented with the game world. In the center of the screen is the house, along with a single turret, and a circling particle that defines the turret boundary. The player's goal is to prevent the waves of ghosts from entering the house. In the top right of the screen, the player's "Haunt Level" is displayed. This is simply the number of ghosts who have gotten past the player's turrets, and entered the house, effectively "haunting" it. When the "Haunt Level" reaches 100, the game is over, and the player is taken to the end game GUI. To the top left of the screen, the player's score is displayed. This score is calculated from the number of ghosts the player has shot using the turrets.
The game is played against "waves" of enemies. At a given time step new ghosts are spawned in certain areas, and it's the player's job to move the turrets to prevent the ghosts from entering the house. When the player reaches certain waves, he or she is rewarded with an additional turret. The player is free to move any turret, at any time, to any place within the moving red circular particle. The player simply left clicks on a turret and while holding the left mouse button down, the player can drag the turret around the house.
Each wave of enemies, camera movement, and turret reward is defined in a script file. This file tells the game when waves occur and what happens when the wave occurs (ie. move the camera and spawn guys at this location). The file can be found at "build\data\missions\mission_script01.dat". It is worth looking at to see how the camera movement and enemy spawning is choreographed. The camera movement is represented by a spline, and it allows for the smooth movement from one point to another in a given time period. We are expecting to add more scriptable events in the game for the final demo.
The terrain in the game is generated from a bmp file. This file is loaded when the game starts and is rendered accordingly. The terrain still needs to be textured and the normals for the vertices need to be properly calculated. Expect these completed in the final demo. The player can also see an early version of our fog on the ground. We did not have time to add vegetation into this milestone, but we expect to have variable densities of trees and grass in the final version. The circular particle moving around the house shows off our particle generator that is able to produce a wide variety of particle effects. For this milestone, you are able to move the camera using the "WASD" keys, and you able to rotate the camera using the "Q" and "E" keys. Full screen mode can be enabled by pressing "ALT" and "Enter" simultaneously.
We faced numerous technical challenges when completing this milestone. The terrain was troublesome. Initially we created a randomly generated height map to create the terrain, however this yielded poor looking results. Eventually, we realized that reading the terrain in from an image file provided the easiest and best looking terrain. Creating the particle system was difficult too in that it relies on so many small modules. For example, a spline generator had to be written so that the particle could have smooth path to move on. Another technical issue was interacting with the environment. Pointing and clicking proved to be harder than initially thought. Creating the game world class also provided us with several technical design issues when it was being designed.
Michael: Terrain, Audio, Scripting, General Gameplay Programming, Art, and Public Relations
Ryan: Game World (including spawning of enemies, turrets, projectile creation and movement, and simple AI)
John: Particle System, Splines, Camera, Fog, Rendering Engine, Script Engine
Dustin: GUI, Game Interaction (mouse clicks and keyboard movement), and General Gameplay Programming