Development Time

Team Size




3 months



HellGun is a singleplayer arena shooter, with heavy focus on tight movement control and juicy gameplay. The game automatically uploads the players' score to a leaderboard server.


This is a solo project with the purpose of furthering my knowledge of C++ and OpenGL, and how the two can be used to create applicable code and modules. The project consists of three separate components: an OpenGL-library, the actual HellGun engine and a scoreboard server (written in C# for Linux).

The HellGun Engine

The game engine is built from scratch and is handcrafted to run HellGun specifically.

Features include basic collision detection, physics and a particle system. Some other features such as audio, context creation and input management are accomplished using libraries such as SFML and Boost.

Some of the movement mechanics in HellGun include dashing, double jumping and wall jumping, all of which can be combined.

Code Samples

Gun mechanics and particles. Recoil is added to character which enables some air control.

Enemy AI, which is relatively complex. I wanted the enemies to feel a bit random and unpredictable, but keep them moving in "packs".

Code Samples
<Particle Controller>
<Trail Effect>
<Gun Muzzle Effect>


Server source at GitHub

After each round played, the players' stats are uploaded to a server which stores it in a database. The server is written in C# and compiled with Mono to run on a remote Linux server. HellGun communicates with the server through TCP socketing, using a simple query protocol.

Scoreboard in the game. Displays the top 5 entries, as well as 5 local entries. All of this data is received from the server after every game.

Interface on the server. Accessed with SSH though PuTTY.


Each square represents a byte

The format of the packets sent between the client and server. The client will send a query, and if the data is valid the server will send a response.

Add Request

Get Request

OpenGL Library (GLT)

GLT source at GitHub

The GLT (OpenGL Tools) library has three main elements:


OpenGL Classes

To minimize direct OpenGL calls, classes are made for the most common OpenGL functionality.


Rendering Classes

To make the pipeline of Shaders, VAOs and VBOs a bit simpler to use, the Mesh class is designed to handle standard attribute buffers such as vertex positions, color, normal and UV. The class also handles binding all these buffers to specified attributes.


The Transform struct is used for handling position, rotation and scale for objects in world space. The struct will output MVP and Normal matrices for use in renderering.



Some utilites such as Fonts, FrameBuffer rendering, Cameras and Timers are included in GLT to make sure that creating working games is as smooth as possible.