Other Coursework
A selection of other coursework:
3-in-1 2D Games with Common Wrapper (C#/XNA) & (C++/DirectX 9.0)
Fig 1: Screenshot of Space Monkey game
Fig 2: Screenshot of Vertical-scroller platformer
Fig 3: Screenshot of Asteroids Game port
The three games share a common menu system wrapper as well as common manager classes and objects, and utilises game states to simplify code structure. The games themselves feature both vector graphics and animated sprites, and tile-based levels. The program was initial written in C# using XNA. In its second iteration, another student's game was ported into the common wrapper and in its final iteration the program was ported into C++ using DirectX 9.0.
Animation Engine (C#/XNA)
Fig 4: Model running around heightmap as part of Animation Engine
Fig 5: Screenshot showing Bloom shader effect
As part of a group, we created a real-time animation engine that allowed the user to move a model around and perform actions. In the motion-capture studio we recorded a number of actions to map to our skinned 3D model. The recording was then cut up and processed into walk, run and idle cycles, as well as the extra action animations. As the player-character moves around and stops these cycle animations play automatically, while the actions are triggered by the user.
Content Pipeline (C#/XNA)
Fig 6: Collada Content Viewer
A group task which involved writing a content processor which was able to import the Collada model file format (dae file) and convert it into a native XNA model file format (xnb file) which could then be used during runtime. The project also consisted of a content viewer (see figure 6) which could load both model formats allowing the user to interrogate the model by rotating and zooming into the model, showing it as wireframe or as a point cloud as well as displaying information about the model.
Maths Assignement: Bezier Curves (C#/XNA)
Fig 7: Bezier Curve Designer
Fig 8: Demo of an Animation Path using Bezier Curves
A demonstration of how Bezier curves can be used in computer games. The system allows the user to design a Bezier curve by clicking on a number of points on the screen (see figure 7). This curve can then be imported into three demos. The first showing the how the Bezier curve can be used in animation paths with an animated figure moving along a Bezier curve as if walking a tightrope (see figure 8). The second is a demonstration of how Bezier curves can be used in easing in and easing out of animations so gradually speeding them up or slowing them down which gives for a more realistic movement especially if used as part of an animation walk cycle. The third demo shows how in cut-scenes Bezier curves can be used for the path the camera takes when moving into the scene so giving for a more cinematic effect.
Using the Havok Physics Engine (C++/DirectX 9.0)
Fig 9: Demo using the Havok Physics Engine
A model of an erupting volcano firing debris into the atmosphere and projectiles down into the valley using the 3rd party Physics Engine, Havok. This involved becoming familiar with the engine's API. The simulation uses a Height Map in DirectX to render the volcano to the screen, which is derived from a Bitmap grayscale image, with values of 0 - 255 to represent the height, whilst the projectiles are spheres and cuboids. In the Havok physics engine the volcano is modelled as a Sampled Height Field with Rigid Bodies as the projectiles to which an impulse is applied if they enter a region in the volcano's crater (a Phantom in the Havok world).
2D & 3D Games with Common 2D/3D Engine (C++/DirectX 9.0)
Fig 10: 3D Cube Menu System
Fig 11: Velocity Raptor 3D racing game
Fig 12: 3D Retro Games Massacre First-person Shooter
As part of a group, we designed and coded two 3D games (see figures 11 and 12) which utilised a common 3D game engine. The architecture of the system was designed for maximum code-reuse and potential platform independence by separating the code into three distinct layers (the language, platform and application layers). The system also incorporated the three 2D games which each member of the team had written as part of an earlier task so simulating the effect of working on a project with a large code base. These games and the two 3D games were accessed via a novel 3D cube based menu system (see figure 10).