Bellum Engine is a component based C++ 2D game engine we did for our second year project, Souls of Iliad.
Main Features I worked on and implemented :
Core Engine Architecture
- Serializer: Save and load levels, objects, components and spaces.
- RTTI: Real Time Type Information.
- Scene: Scene management, object creation and deletion.
- Logic System: System to add behaviors to game objects, which allows team members to give custom logic to any object with C++ code.
- UI System to create menus.
Game Editor
Used ImGui to build the entire game editor from the ground up to provide my teammates ways of editing levels in a fast and easy way.
- GameObject creation, deletion and editing.
- Capabilites to add and remove components.
- Editing component properties.
- Multiple selection and parenting visualization.
- Special object creation (Particle Systems, TileMaps, Texts…).
- Level Loading ans Saving.
- Space changing and rendering.
- Simple console to print debug information.
- Created my own simple guizmos for transforming objects.
Particle System
The first time I got in touch with graphics programming and OpenGL.
Particle Systems can be edited to create interesting and enhancing effects for the game, we used them to create dust particles and different kind of fire effects among other things.
Although it does not support instanced rendering given my limited graphics knowledge at that time, I tried the best that I could to make the particle structures as small as possible and to store everything in an efficient way in memory, obtaining more than 60fps with 50.000 particles on screen which was more than enough for our budget.
TileMap and TileMap editor
Our game levels are completley based on tile maps given our semi isometric view. The game’s maze was randomly generated each time the player made a run and so it was important to be able to generate unique and interesting rooms as fast as possible.
We went with tiles because it allowed us to combine different textures and create paths, cliffs or walls very easily.
Although the tile map itself does not do much on its own (mostly renders the tiles), the tile map editor I developed became very useful for both artists and my fellow programmers.
The TileMap editor supports:
- Tile placing and removal.
- Tile rotation.
- Tile picking (just as color pickers to avoid needing to look through the textures).
- Changing tile modulation colors.
- Grid and Tile preview to visualize how everything would look.
In addition to that, I made it so that the graphics pipeline only rendered tiles that were visible by the camera so that we could get some extra FPS.
Text Rendering
Dived a bit more into graphics and implemented text rendering with the help and explanations of my instructor. Later on added an efficient way of appending text.
2D Lighting System
Created a 2D lighting system based on addition of colors to give depth and variety to our game.
It is heavily used in the forge room combiened with fire particle systems. The player could choose an upgrade between health, more damage or more arrows, each upgrade was represented by a color.