top of page

Custom Game Engine

Along with our capstone studio responsibilities, programmers at FIEA are tasked with creating our own custom game engine from scratch written in C++.

This has been the most important project during my training, as its goal is to not only teach us C++ skills and best practices, but also to gain a complete understanding of how modern day game engines function at a base level.

Through the creation of this engine I have:

  • Gained strong knowledge of C++ syntax and the expressive potential of the language

  • Learned to grow and maintain a large code base that continues to build off itself

  • Developed a unit testing framework and debugging process that can be used throughout my career

  • Learned to use Visual Studios to create, maintain, and distribute projects in an industry standard fashion

  • Used JSON to master the deserialization process necessary for most applications

  • Gained a complete understanding of game engine structure and the process of exposing raw data to a scripting engine.

​

Below you will find examples of engine functionality that highlight the unique experience that this project has given me.

HashMap2.PNG

Custom Library Containers

Implemented my own Linked List, Vector, and Hashmap to gain a better understanding low level data structures

  • Gained a deep understanding of C++ Move/Copy Semantics

  • Practiced dynamic programming using C++Templates

  • Implemented custom Iterators to work with STL container interface

Hierarchical Scripting Language

Created a system that allows native C++ game data to be stored and exposed to the custom JSON language

​

  • Datum - structure that allows internal and external storage of data as primitives, user defined types, or Scopes

  • Scope - recursive relationship with Datum is used to form a hierarchical database

  • Attributed - binds data to the engine by mirroring native C++ classes as Datum/Scope objects that can be manipulated through JSON

Scope.PNG
Parse.PNG

JSON Parsing System

Wrote a system to deserialize data at runtime, allowing for JSON to act as the scripting language for the engine

​

  • Used the chain of responsibility pattern to allow an extendable coordinator/helper system

  • Custom JSON grammar used to structure game object hierarchy

  • Practice working with abstract base classes/inheritance

Game Object

Designed an entity system similar to modern game engines that defines a base structure for objects that will make up the game world

​

  • Signature system uses Datum/Scope/Attributed to express common attributes (Transform, Name, Parent/Child Structure)

  • Type Manager allows custom types with the extension of game objects through C++ Inheritance

  • Update loop implemented through the Scope hierarchy

  • Factory pattern used to allow construction of user defined types at runtime

GameObject.PNG
Event.PNG

Action & Event

Developed a system that allows game objects to exhibit behaviors through the encapsulation of functionality within the Scope hierarchy 

​

Action - extendable interface that allows user defined C++ logic to be nested within the GameObject hierarchy, adhering to the update loop based on adjustable conditions

​

Event - templated queue system that implements the observer pattern to allow GameObjects to subscribe and react to the behaviors of other GameObjects

Unit Testing Framework

Structured a project testing environment using Visual Studio's CPPUnitTestFramework

  • Maintained testing methods throughout project lifecycle, developing modules for each individual class

  • Wrote extensive unit tests to exhaust edge cases and discover bugs before continuing development

TEsting.PNG
BomberJpg.PNG

Super PoggerMan

At the end of the project, teams were formed to create a game using the engine. We created a final version based on the work we all had done, and made a Bomberman clone that combined our engines functionality along with SDLs rendering framework 

​

  • ​BomberMan gameplay emulated through a dynamic tile system

  • Use of custom engine functionality seamlessly combined with SDL framework

  • Fully customizable game maps through JSON

Custom Game Engine: Services
bottom of page