1- System Overview 11- Acknowledgement 6

School of Computing &
Information Sciences
Senior Project, 2013, Fall
Game Engine – Audio Subsystem, Configuration Subsystem
Student: Brian Lara, Florida International University
Mentor: Wei Zeng, Assistant Professor
Instructor: Masoud Sadjadi, Florida International University
3- Current System
1- System Overview
The goal of this project is to create an open, easy
to use, and free game engine. The game engine should
allow users of all experience levels to easily get started
creating sophisticated games, by providing many key
features needed for game development.
Ogre 3D is an open source rendering
engine. While it provides extensive rendering
functionality, It does not provide many of the
other features for game design.
Moai provides and open source game
engine that allows the user to create the game
with Lua. Unfortunately, this is the only way a
user may create a game. By forcing the user to
only use Lua paired with the unique architecture
makes it impractical for larger scale games.
2- Problem
A game engine is not complete without audio
playback. Any game made without audio will not leave
the lasting impression of memorable moments that we
all have come to know and love from video games.
A game engine also needs to maintain the state of
its variables to remain consistent throughout its
execution. Incorrect manipulation of an engine variable
can create a domino affect of unintended changes to the
stability of the game engine itself
The Unreal Engine is a very popular
game engine used throughout the industry.
However, its very high cost typically make it
an unreasonable choice for smaller studios.
4- Requirements
•
•
•
•
•
•
5- System Design
6- Object Design
My Requirements
The system shall provide an audio system that can play, loop,
and fade audio files synchronously with on screen rendering.
The system shall provide an engine configuration subsystem
which will allow retrieval, storage and modification of engine
configuration variables.
Requirements that are integrated with my system
The system will provide a way to initialize and control the
application using a core game loop that will be maintained by
the user. It will also be able to initialize all the various sub
systems.
The system shall implement an asset management subsystem
which will allow data to be loaded onto game engine memory
in an efficient manner.
The system shall provide an internal engine messaging which
will allow a way for subsystems to send messages to multiple
listeners across the engine every time it is updated.
The system shall contain a scripting subsystem which will
provide a method of developing with the engine using only a
simple scripting language.
7- Implementation
Configuration Subsystem Class Diagram – Shown above is
the Configuration Manager class which contains a map of
Variable Containers, and methods to set, retrieve and remove
them.
• The project was built with CMake and programmed in C++.
• The Configuration Manager class contains a map of variable
container’s.
• The Variable Container class uses generic programming to
store any type of variable.
• The Audio Container class makes calls to the open source
library known as SFML.
• The Audio Container stores all the information regarding the
audio file and allows the user to call its methods to hear audio
playback.
• The Audio Container must be loaded via the Asset Manager to
ensure efficient handling of resources.
8- Verification
Google’s testing framework Google Test was used to verify
our system and tests were written as implementation of the
system was taking place.
A bottom up approach was used because it was the most
intuitive testing strategy. It allowed us to verify our work quickly
by encountering bugs early on in the development cycle.
Above is our package diagram that shows the
open layered architecture that was used to create the
game engine. Having the layered architecture open
allows the layers to communicate to any other layer
below it. The circled artifacts are the subsystems that I
was responsible for, namely the Audio Management
Subsystem and the Configuration Management
Subsystem.
Audio Subsystem Class Diagram – Shown above is the
Audio Container class which inherits from the Asset class in
the Asset Management Subsystem. The Audio Container
class contains methods that provide the user with audio
playback functionality and details about the audio file.
9- Screenshots
The screenshot above shows an example of how a user will use the Audio Management Subsystem to play an
audio file. The two simple steps are one, load an audio file via the Asset Manager class and two call play on the
resulting Audio Container.
The screen shot above shows the successful execution of
22 test cases that were used to verify the functionality of the
audio and configuration subsystems.
10- Summary
Creating a new game engine will be the approach our team
has taken in order to allow flexibility in meeting our goals of userfriendliness, cost efficiency and accessibility. Leaving our game
engine open source will allow new game developers to gain easy
access to game development tools at no cost. Providing an easy to
use interface and overall user-friendly development environment
will make it simple for new game developers to acquire the
knowledge needed to use the up-to-date game engine
technologies.
11- Acknowledgement
The screenshot above shows an example of how a user will use the Configuration Management Subsystem to store
and retrieve an engine configuration variable. The code shows the user getting an instance of the Configuration
Manager and calling the two methods setVariable() and getVariable() on it.
I would like to acknowledge the developers of the SFML
library for their very capable audio library and I would also like
to thank my teammates Antonio Diaz, Robert Law, Michael
Weschler, and Julian Nodarse for being very competent and
helpful individuals. Last but certainly not least I would like to
thank God for gifting me with determination and perseverance.