Pepi engine is a game engine created by a group of 8 programming students from Breda University Of Applied Sciences in 8 weeks. This engine with its toolset was created to make a daunting task of creating real time strategy games easier and more accessible. It's main functionalities were: custom rendering pipeline, robust level editor, visual AI scripting tool, ECS, Navigation (nav mesh and grid-based), locomotion library with multiple flocking and grouping behaviors, serialization of components, entities and entire scenes.
Level Editor
Finite state machine editor for animations and AI
Simple in-editor work presentation
Capable of creating playable games
The tool that I created allowing to define AI behaviors and selection logic via both Finite State Machines (FSMs) and Behavior Trees (BTs). The main features of the tool were:
Programmatically defining behaviors and states with exposed parameters allowing for dynamic prototyping and quick adjustments for the designers.
Blackboards storing data of all types representing all information available to the AI with a debug functionality that allowed the user to preview all values stored inside the data structure.
Visual editors for FSMs and Behavior Trees allowing for defining the logical flow of the AI and transitions between states, with extra serialization
Visual debugging for behavior for Finite State Machines and Behavior Trees indicating which state the structures were currently in.
This posed as a base for gameplay functionality for the game Owlet created using the engine- all units were utilizing the behaviors built with the tool. The tool was robust enough to implement a separate animation system with finite state machines without writing any additional code.
During the project I worked on multiple core features inside the engine, the most notable ones were:
Adding multicast delegates to the engine to handle gameplay events.
Adjusting existing ECS framework (entt) to handle messages and events to allow for pararell calculations
Contributing to serialization system for robust and simple to use serialization of entities, components, levels and AI structures using existing library (cereal).
Creating multiple gameplay tools and systems:
- Area tagging inside the level editor to allow for scripted gameplay areas with certain behaviors,
- Performant physics system utilizing optimization structures (BVH) handling collisions and collision events
- Easily cusotmizable order system for RTS gameplay allowing to select units and dispatch orders with key bindings
From scratch I implemented a navigation system that allowed for performant pararelized path calculation on the grid for up to 5000 agents on arbitrary graphs, nav mesh and grids- the approach we used for the game Owlet was grid-based, yet switching to nav mesh was a matter of several simple adjustments. The navigation ran in pararell for each agent. Furthermore, the navigation had basic functionalities for path smoothing, as well as tracing the shortest path using the funnel algorithm.
Grid graph in engine, the level designers could easily edit the areas for navigation with tags and special interest points where the enemies could navigate to
CI/CD and QA pipelines using GitHub Actions.
From a plan to realization I single-handedly worked on a QA pipeline for our team with multiple automations including:
Build checks for all platforms and configurations on every pull request
Unit test checks for pull requests
Automatic formatting and clang tidy
Linter checks
Build artifacts generation to instantly push them to itch.io
Discord bot integration to notify the team about pull requests