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).
Some of the movement mechanics in HellGun include dashing, double jumping and wall jumping, all of which can be combined.
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".
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.
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.
The GLT (OpenGL Tools) library has three main elements:
To minimize direct OpenGL calls, classes are made for the most common OpenGL functionality.
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.