Summary
Fennec is a cross-platform game engine I've been working on for a really long time. Usually just picking at random parts of it after I finish work for the day. It's based on Monogame and a very very old and, at this point, heavily modified version of Nez. I give both of these projects a lot of love! Check them out!
The engine is entirely written in C# with some offline content processing tools written in Elixir. (Called QuickTools, see the section on them below for more info...)
Some of the features I tried to prioritize when building this engine were:
- Ability to reload/change game code without stopping the entire engine.
- Ability to edit levels in the engine itself.
- Abstracting the gameplay code/modules from the engine modules to facilitate modding.
- Driving most of the game with files: Textures, Animation Data, Entity Defs, Maps, etc.
- Windows, MacOS, Linux and possible console support (Monogame helps take care of those!).
- Utilize the Entity Component System (ECS) pattern for most gameplay elements.
Components
The engine is made up of a few "components" or "modules"...
- FennecEngine
- The core of the engine.
- Contains the modified version of Nez.
- Debug utilities.
- Level Editor.
- ImGUINET bindings.
- Public APIs for scripting modules (see: FennecGame).
- FennecPipeline
- Plugin/Module for Monogame's content pipeline system.
- Processes spite-sheets and animations in the TexturePacker JSON format.
- Processes output from a custom ToonBoom plugin for animations/recolor information.
- Processes Tiled JSON map formats.
- Processes Yarn dialogue files.
- Produces a content manifest file for quick asset lookups at runtime.
- FennecAudio
- Bindings for the FMOD based audio engine.
- FennecGame
- DLL Module that contains gameplay components, scripts, and other related logic.
- FennecCompiler
- Standalone executable that loads both the
FennecEngine
andFennecGame
module, and compiles "Entity Templates". - These are
.cs
files that produce a complete entity made of components. They're compiled into.fent
files. - The
.fent
files can be placed in maps, referenced as a file, so if the template updates, so to the instances in maps.
- Standalone executable that loads both the
- QuickTools
- Elixir based content generation tools.
tconv
: a tool to convert different types of sprite sheets into the TexturePacker JSON Format.bit_mappers
: takes an input Tiled Tileset Def and a bitmap and convert it into an actual map.ex_mgbc
: Monogame content definition file parser and generator. Rule based, so any new content added is automatically added to the pipeline.
Updated: 09/14/2024
This page is still being written...