Ee Xuan En, Arvin
BarrelBoy
Game Engine: DKat
Platform: PC
Programming/Scripting Language: C/C++
Barrelboy is our second-year software engineering project. My main role for the project is graphics programmer.
Also in this project are Peh Shi Hao (Product Manager, Gameplay Programmer), Phang Jia Rong (Lead Programmer, Framework), See Yong Li (Art Lead, Physics Programmer), and Abigail Voon Xue Li(Designer).
Barrelboy is a platformer assuming the role of a magical barrel in the fantasy forest to fire water-based attacks and fight its way out of the forest. Other than the game, the engine is also developed by our team.
Below are game screenshots,
Scope of Work:
-
Graphics Programming using OpenGL API (with batching)
-
Shader GLSL code
-
Win32 Setup with fullscreen, focus, Window events, and Input
-
Sprite Animation
-
Vector2, Vector4 and Matrix 3X3 math
-
Text Rendering
-
Camera with panning
-
Editor Scene Window (with Gizmos, mouse select, duplicate, undo, snapping)
-
Particle System
-
Draw and Drop files to the file browser
-
Boss AI
-
Effects creation using Particle System (water, walking in tar, splash on hit, healing effect, leaf, bos effects)
Gameplay
Player Controls
Barrelboy has 3 types of shooting abilities, default shoots with gravity, straight-shooting, and boomerang water projectiles. Each projectile shot will consume water which is shown by the blue bar in the game. The type of projectile is changed when picking up weapon boxes dropped by enemies. Each type of shooting has its own advantages and uses allowing the player to experiment and pick his preferences.
The player can also use the rolling control to move with more speed and attack enemies in close range.
Environment
There are multiple environmental elements that hinder or aid the player such as the tar which slows the player, healing water to recover health and ammo, spikes that damage the player and in the boss level flowers that have a limited recovering limit.
Enemies and Checkpoint
There are also multiple types of enemies in the level such as the ranged that shoot projectiles, mushrooms that do a small jump and damage on collision, the roller that charges toward the player, and the leech that is stuck on the ceiling before pouncing onto the player.
There are checkpoints in the level to aid the player if they die accidentally so it doesn't restart from the starting point.
Game Engine
Below are engines screenshots,
The game engines consist of multiple components: Windows and Event System, Object and Serialization, Graphics System, Physics and Collision System, and Editor Tools.
We have also used some external libraries to create the engine: GLEW, GLM, RapidJson, ImGui, FreeType2, SOIL (Simple OpenGL Image Library), and FMOD.
Graphics
In Engine Graphics Objects and Function
Model:
The main component that communicates to the ECS and the rest of the engine. It provides specifications of what to draw and what to use to draw together with other variables such as color, transform, sprite information, shader etc. The values being edited in the editor would change what is drawn in the scene.
Mesh:
A description of indices and vertices of the default drawing shapes such as squares and circles.
Sprite:
The subcomponent that allows the drawing of textured models and animated models. It handles all sprite animations by receiving all the infomation of the animation from as written from the sprite sheet.
Vaoid:
The struct to store information of drawing from all provided by model components, divided by shader type, mesh type, and texture. The graphics system uses this as the main struct to draw to the screen by calling OpenGL apis.
Text:
The main component that communicates to the ECS and the rest of the engine to draw a text. Handled by the text system to provide its own vaoid per font. The graphics system calls the text system's draw function which all information is provided by each text component to draw the text onto the screen.
Particle System:
Each particle system creates a new vaoid in the graphics system which then provides all the draw informaiton for the per particle. The particle system provides multiple editable particle options from random size, position, and even sprite animation. These are also available to change in the editer.
You can download the build of the game here. (Note : This is a Google Share link that leads to an installer.)