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.

Update: Screenshots are completely outdated, this post is intended for curious devs.

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, Outlines
  • 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
  • Mirrors, portals (not used in game)

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
  • Path finding (using recast/detour lib)

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
  • dedicated servers: one ‘server_manager’ per machine, spawning game servers
  • server browser
  • private server (with join codes) (one instance per client max)
  • P2P with Steam Relay Network
  • Tournament servers that spawn subservers, handle tournament progression (players auto dispatch/elimination)
  • Simple load balancing
  • steam account authentication
  • I can run a local backend infra in the developer build to check everything is fine in one exe. (easier debuging)
  • It works also in LAN so I can organize automated tournaments in LAN wich is handy.

Must have / Misc

  • Split Screen support
  • Lobby
  • Score table, notifications feed
  • Chat
  • Remappable controls
  • Xbox gamepad support
  • Localisation (parse source code & data to extract english version)
  • object icon / map thumbnail automatic generation
  • Asset importer (using assimp)
  • Bots
  • Map editor
  • Spectator mode
  • Bug reporter
  • Replays + (replay editor WIP)
  • Video shooter (ffmpeg)

User interface

Here is a collection of (outdated) 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

todo: ship the game.

wishlist on steam

Thank you for reading!