About the Tech

I have developped my own engine for the needs of Ancestral Players. The main reason for this choice is because that is what I like to do :). Here is a list of features, I won’t go into great details at the moment.

Chapters

Core

Core

  • Prebuild pass for type information generation (reflection)
  • Automatic UI (using reflection)
  • Automatic serialisation (with backward compatibility, except rare edge cases)
  • Audio (fmod), maths (glm), engine gui (dear imgui)
  • No stl, many kinds of array, allocators
  • Integrated profiler (always on)
  • Logs, asserts, callstack trace, crash logs, crash reporter
  • Data: bin/txt, packing/encryption, export only used data.

Graphics

Graphics

  • DX11 Forward renderer (with depth prepass), anti-alias: MSAA only
  • Shader hot reload, shader compile cache, shader JIT compile (optionnal)
  • Async texture loading
  • Skinning, Instancing, Morphing
  • Skeletal animations (with merging/blending)
  • PBR, Bloom, Gaussian blur, Tonemapping, Skybox, Fog
  • Cascaded shadow maps
  • Global Illumination : lightmaps + regular probe grid (baked in engine, software gpu bvh, + oidn denoiser)
  • Pathtracer (partial implementation)
  • Character accessories, cloths colorisation, eye expressions

Graphics2

  • Terrain material blending, triplanar projection
  • Water (reflections disabled in practice)
  • Day/Night moods
  • Lava
  • Gpu particle system
  • Metaballs (real time marching cubes)
  • World persistent paint map
  • First person viewpoint render mode
  • Outlines
  • Mirrors, portals

Simulation

Simu

  • Collison broadphase: bvh & box prunning
  • Collison narrow phase: most shapes are supported, code ripped from physx/bullet
  • Solver: homemade impulse based iterative solver
  • Dynamic objects
  • Weapons & bullets (projectile / melee / hitscan)
  • Characters
  • Powers
  • Skill tree, leveling system.
  • Lava/water
  • Multiple game modes
  • Team or FFA
  • Immediate mode debug draw

Netcode

  • Deterministic 100 tick/sec simulation (server: linux&gcc / client: windows&msvc)
  • Authoritative server, initial state replication then input-only synchronisation. (devil in the details)
  • Udp only
  • Client side prediction
  • Lag compensation (100 ms for everyone)
  • Game replays available (init state + inputs)

Note: I spent time making tools to easily detect desynchronisation issues.

Backend Infrastructure (WIP)

  • master server
  • one ‘server_manager’ per machine, spawning game servers
  • public server list
  • private server (with join codes) (one instance per client max)
  • steam account authentication
  • I can run a local backend infra in the developer build to check everything is fine in one exe. (easier debuging)

Must have / Misc

  • Lobby
  • Score table, notifications feed
  • Chat
  • Remappable controls
  • Localisation
  • object icon / map thumbnail automatic generation
  • Asset importer (using assimp)
  • Bots
  • Map editor
  • Spectator mode
  • Bug reporter
  • Replays

User interface

Here is a collection of interfaces I made for my game. Just to remind other fellow devs that UI can be a lot of unanticipated work. Some menus UI still uses imgui (options), all ingame UI are homemade.

Simu

Futur work

An engine is never done, and there is still an infinite amount of work to do. However, I am focus on the game itself. The engine development is driven by the game needs.

You can try the demo on itch

wishlist on steam

Thank you for reading!