top of page

FCE

During the summer holiday between the second and third year, I have been working on a small custom engine for myself called FCE.

I ended up pushing the code to GitHub with a read-me file on how to install the needed modules for it

  • Size: Solo project

  • Duration: ~8 weeks

  • Roles: Programming

Motivation

One of the reasons I wanted to create my own engine was that although my passion lays with gameplay programming, I felt the need to understand the basics of other areas of programming as well.

 

By learning some of the basics of Rendering and Engine programming, it would make it easier for me to help out with the others if they need extra help and makes it easier for me to understand what is going on in other parts of the team / product when I need to bugfix.

Rendering

For the rendering of the engine, I used Vulkan.

The renderer is capable of rendering both in 2 and 3d. (I mainly worked in 2d, hence the 3d version uses random models)

For the UI I use ImGui which makes it so that I can render inside a separate viewport while working on the game.

The Engine also uses a debug camera which you can fly around with and also has debug drawing for the collisions

The Engine

The Engine makes use of an Entity component system with the help of ENTT

Bullet is used to handle collisions and things like movement physics.

The engine uses the Level Design Tool kit to create levels. It supports hot reloading of levels so that you can change certain aspects on the fly.

Statemachine

The engine has a modular state machine, in which you can easily add new states and change out how they interact with each other.

I ended up reusing this state machine for a different Engine project, in which I used this state machine to create multiple enemy types by removing / adding certain states to the state machine. 

image_2023-06-07_113928198.png

Steering Behaviors

There was not really much of a game built on top of the Engine, as it is made as a project to toy around with different algorithms and systems.

The thing that I have already worked on was Steering Behaviours (The video shows an early prototype). These behaviours allow AI to group up and move together without continuously bumping into each other.

Alignment

The bottom AI is moving in a direction while the other two are trying to follow that AI

Cohesion

The AI will try and group up while the top one is also trying to move in it's own direction

Separation

The AI will try to move away from each other, with the bottom one also trying to move into its own direction at the same time

A-star

I later wanted to learn about A star pathfinding as well, so I overhauled the enemies to use A-star instead of steering behaviours. 

The enemy updates its path every few seconds to make sure that it still 

bottom of page