top of page

Junior Year Game Project

Shaman (Jan 2019 - Jul 2019)

Take arms; venture forth; smash the crazed Corrupt King! Shaman is a 3D Action platformer featuring intense combat and exciting elemental abilities for you to explore. Save the Totan Race and lay waste to Ruubathh - King of the Corrupts!

Shaman: Bio

The Team

Jonathan Jerome

Technical Lead

Mitchell Lee

Physics Lead

Ivan Goh

Tools Lead

Nashrulhaq Abdullah

Lead Designer

Ian Hwang

Producer

Lim Wei Lun

Graphics Programmer

Cheong Shu Hui

Cinematic Programmer

Ow Yong Gui Ming

Programmer

Lim Jia Ji

Programmer

Jamie Tay

Artist

Shaman: Team Members

GAM300/350

Our GAM300/350 project was developed by a team of 10 programmers, designers and artists over a 6 month period.

Engine_overall.PNG

3D Custom Engine

As technical lead my job was to plan the architecture of our project and to assign the responsibilities of the different systems to our team members (based on their strengths and preferences). I made considerable effort to communicate with all programmers in order to understand their implementations on a near daily basis. This paid off in spades as understanding most of the code base, allowed me to find and eliminate bugs whenever we were integrating new features. This was my first taste at leading a team of programmers larger than 4 and it was a thoroughly fulfilling experience. I am truly thankful for everyone on the team.

VS_01.PNG

C++ DLL Scripting

After the failure to integrate a scripting language for our GAM200 project, I had learn't many things. Firstly, I knew that this was a system that had to be built in tandem with the engine and would require considerable maintenance. Secondly, I knew that it was necessary because our project would be much bigger now and we'd be loading more expensive assets like 3D models. Lastly, I knew everyone on the team preferred C++ to any scripting language (C# is a close second). 

Thus we decided to use a technique know was C++ DLL scripting. We created a second solution which inherited (abstractly) the functions of our core engine. Then we built this new solution into a DLL which our engine could load at run-time. Once the framework was working it was only a matter of keeping up with the many new features that were added throughout development. Thus whenever a change was made to a script, we could just rebuild the DLL and see the changes without closing the editor.    

Engine_Properties.PNG

Features

Because of a larger team size for this project, we were able to add many more features to our game engine which allowed for faster iterations and less frustration. Our "Prefab" feature allowed us to save Game Object templates and spawn them via scripts just like in Unity. We could drag and drop in many assets like models, sounds and textures for easy use. And we had a property/reflection system similar to Unity's where variables in scripts were displayed in the editor and could be adjusted and saved.

Engine_Debug_Window.PNG

Low Level Implementation

In order to optimize our engine for larger 3D worlds we had to reduce our overhead as much as possible. The most obvious expense was memory allocation, so instead of using STL's "new" at run-time, we allocated memory once at the engine's initialization and used a memory manager during run-time itself. We also optimized the physics to have different collision layers and a "IsTrigger" function to reduce the number of calculation per frame. Finally we assigned GUIDs to unique strings so that run-time string comparisons would turn into integer checks instead.

Shaman: Services
GAM300.PNG
Shaman: Files

Download

Download Shaman for Windows PCs on the DigiPen Games Gallery

bottom of page