🐾

home

|

devlog

|

about

🐾

Engine Overview

Image of the Fennec engine with a basic tile map open under the ImGUI based level editor


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 and FennecGame 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.

  • 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...