Rival Fortress

Explore, evolve, conquer.

Rival Fortress is an upcoming exploration sandbox game set in an alien and hostile world.

Keep an eye on this page for development updates, gameplay screenshots and videos.

Screenshots and Videos

Coming soon!

Current Milestone

Rival Fortress v0.1.0 progress: 23%23%

Recently completed tasks

engine

Asset preloading on startup

tooling

Merge metareflect with asset packer

tooling

Shader minification and caching

Technical details

Platforms

  • Microsoft Windows
  • Linux
  • OS X

Engine

Metric Panda Engine (MPE)

Graphics API

OpenGL

Languages

  • C 54.1%
  • C++ 38.0%
  • Assembly 4.5%
  • Other 3.4%

Release Log

Rival Fortress v0.0.26 pre release

Zippy Zebra

Jul 28, 2016

  • Extracted engine into standalone repository
  • Added support for unpacking “PAK” asset files
  • Improved PAK file modularity and dependency management
  • Added support for nested PAK files
  • Cleanup Linux platform layer
  • Removed support for 32 bit builds (for now)
  • Switched all cross-platform toolchains to LLVM/Clang
  • Streamlined builds for OSX and Windows
  • Added DXTC texture compression
  • Improved meta reflection and source preprocessing

Rival Fortress v0.0.25 pre release

Yammering Yeti

May 29, 2016

  • Added possibility to scale resolution in forward and deferred render paths
  • Enabled config settings to choose between deferred/forward/forward scaled render paths
  • Better handling and failover for default material
  • Better caching of OpenGL state changes
  • Increased max point light count

Rival Fortress v0.0.24 pre release

Xylophonic Xenops

May 26, 2016

  • Fixed X11 cursor grabbing when in fullscreen
  • Cleanup GLX initialization by only loading needed extensions
  • Added support for demo playback using command line flag
  • Added command line flag to enable single threaded rendering path for compatibility with apitrace

Rival Fortress v0.0.23 pre release

Wonderful Walrus

May 23, 2016

  • Initial networking implementation: working dedicated server and P2P connection over UDP
  • Basic UDP networking model with replication and serialization generated by the engine’s meta reflection
  • Standalone headless dedicated server and listen server mode for clients
  • Added many unit tests for UDP packet sanitization

Rival Fortress v0.0.22 pre release

Vibrant Vixen

May 2, 2016

  • Improved player jump code and controls in general
  • Added mesh pooling to renderer with shared/recycled VBOs and IBOs
  • Revised asset packer to support referring to assets either by integer hashed name or by char* at runtime
  • Implemented constexpr string hasher for compile time hashing
  • Cleanup camera code and formalize notion of multiple cameras with different parameters

Rival Fortress v0.0.21 pre release

Unassuming Urchin

Apr 27, 2016

  • Included benchmark tests as part of the main test suite
  • Added OpenGL uniform block generation to engine meta reflector
  • Implemented deferred rendering path and added multiple frame buffer visualization to editor
  • Added UV generation to procedural shape generators
  • Improved material uniform handling with better batching of draw calls

Rival Fortress v0.0.20 pre release

Triumphant Tortoise

Apr 16, 2016

  • Added shader-only skybox with simplified atmospheric scattering and time-of-day sun position
  • Implemented simplified box collision for player entity and world terrain
  • Merged code paths for rendering of models coming from assets or generated procedurally

Rival Fortress v0.0.19 pre release

Sentimental Shark

Apr 13, 2016

  • Implemented video capture by piping raw back buffer pixels to ffmpeg
  • Added string pool with string interning capability for UI messages and user input
  • Implemented synthetic benchmarking that can auto-detect ideal graphics configuration
  • Exposed more engine internal settings through .ini configuration
  • Added ability to load and unload the editor completely

Rival Fortress v0.0.18 pre release

Rebellious Rooster

Apr 9, 2016

  • Added super sweet jump code (not)
  • Initial physics implementation for simple moving entities
  • Decoupled rendering layer from platform layer in order to enable hot-reloading

Rival Fortress v0.0.17 pre release

Quirky Quokka

Apr 8, 2016

  • Basic procedural world generation using Perlin noise
  • Debug 3D rendering of wireframe primitives and lines
  • Implemented OpenGL state cache for older hardware that doesn’t support new forms of draw call batching
  • Optimized VAO/VBO for chunked voxel rendering and pooled IBO for UI rendering
  • Implemented orthographic and isometric view with camera controls
  • Improved meta reflection pre-processor to support pointers and implicit arrays
  • Added more data structure templates to the meta reflector

Rival Fortress v0.0.16 pre release

Perceptive Pigeon

Apr 4, 2016

  • Implemented voxel chunked rendering with in-memory chunk streaming
  • Added support for fast render path using glMultiDrawIndirect and glBufferStorage for modern GPUs

Rival Fortress v0.0.15 pre release

Opportunistic Ostrich

Apr 1, 2016

  • Voxel rendering path with support for textured and flat colored voxels
  • Greedy meshing implementation for procedural voxels
  • Fixed Linux keyboard issue with duplicate release events reported by the OS
  • Added first person and third person camera controls

Rival Fortress v0.0.14 pre release

Nostalgic Nightingale

Mar 29, 2016

  • Unicode text rendering and input
  • Implemented rendering path for complex text formatting and coloring
  • Debug visualizations for text formatting

Rival Fortress v0.0.13 pre release

Majestic Mongoose

Mar 27, 2016

  • Fixed position independent code (PIC) for assembly implementations of glibc functions
  • Streamlined startup initialization, window creation and OpenGL context creation
  • Re-enabled hot reloading of game code (was broken for the past three versions)

Rival Fortress v0.0.12 pre release

Litigious Lobster

Mar 24, 2016

  • Basic profiler implementation based on Sean Barrett’s IProf
  • Cleanup X11 platform layer: simplified multiple monitor and keyboard code
  • Improved text rendering with support for sub-pixel precision and variable unicode character sets
  • Simplified thread local storage implementation by removing C++11’s thread_local as it’s unsupported on OSX
  • Changed primary compiler from GCC to Clang on Linux
  • Added more custom allocators and formalized memory alignments for various data structures
  • Removed more glibc dependencies (memcpy, memset, memmove) and implemented them in assembly
  • Changed primary development machine from Windows to Linux

Rival Fortress v0.0.11 pre release

Kinetic Kangaroo

Mar 6, 2016

  • Added cross-compilation toolchain for Mingw-w64. Can now compile 32 and 64 on Windows for Linux
  • Fixed dynamic module loading and data sharing across DLL boundary
  • Removed GLFW completely. The platform layer for Windows, Linux and OSX is now completely home-brew!
  • Moved logging to separate thread alongside the asset subsystem
  • Re-implemented some more standard library functions in ASM
  • Put platform layers on a diet: removed all unnecessary cruft left over from SDL and GLFW
  • Better dynamic library loading on Windows

Rival Fortress v0.0.10 pre release

Judicious Jellyfish

Feb 24, 2016

  • Added rendering path for instanced objects
  • Rendering of basic parametrically generated shapes with flat lighting
  • SIMD improvements to math library
  • Raised minimum requirements to OpenGL 3.2 (GLSL 150)
  • Workaround a Linux GLX crash when debugging with gdb the multithreaded rendering path

Rival Fortress v0.0.9 pre release

Insightful Iguana

Feb 20, 2016

  • Added more information to debug overlay
  • Better OpenGL error handling and trapping. Sections of the render path can be independently isolated for better debugging
  • Simple procedural wireframe rendering
  • Basic flying camera with WASD controls

Rival Fortress v0.0.8 pre release

Humourous Hornet

Feb 17, 2016

  • Basic implementation of HTTP downloader that fetches new version of game using Berkley Sockets
  • Atomic data structures (ring buffer, hash, queue) for more robust interaction between threads
  • Cleanup CMake build scripts for Linux and Windows
  • Streamlined asset loading with better handling for limited memory constraints
  • Shader preprocessing and load order optimization. Materials are created in an order that allows better reuse of intermediate shader objects

Rival Fortress v0.0.7 pre release

Gleaming Giraffe

Feb 13, 2016

  • Added support for struct parsing in engine meta reflector
  • Initial Mingw-w64 port in order to cross-compile for Linux and Windows on Windows
  • Added documentation annotation to structs and struct members that is parsed by the engine reflector and output in the config .ini file
  • Added assembly implementation of some C standard library functions that perform very poorly when linking to the version of glibc provided by the Steam Runtime for Linux
  • Removed some unnecessary bloat from GLFW and reimplemented event loop without using callbacks provided by GLFW

Rival Fortress v0.0.6 pre release

Ferocious Fennec

Feb 7, 2016

  • Extracted glgen from engine. Glgen is an OpenGL library and function prototype loader
  • Unicode support on Windows for filesystem loading
  • Initial meta reflection preprocessor implementation. Automatic generation of config file loader.
  • Borderless fullscreen support for Windows and OSX
  • Asynchronous “janitor” thread system that allows subscribers to queue recurring tasks
  • Initial Lua mod support with C bindings
  • Custom CMake build script for LuaJIT that removes jemalloc in favor of using the engine’s allocator

Rival Fortress v0.0.5 pre release

Extroverted Elk

Jan 31, 2016

  • Fixed race condition when waiting for rendering thread to complete
  • Cleanup Windows platform layer by removing unnecessary code
  • High precision timing for Linux and OSX
  • Fixed platform event polling

Rival Fortress v0.0.4 pre release

Dazzling Dolphin

Jan 30, 2016

  • UI Atlas packing with bitmap font and icons
  • Debug bitmap writer that saves OpenGL back buffer to disk
  • GLSL parser used by asset packer to parse #include in shaders
  • OSX Cocoa layer fixes and improvements

Rival Fortress v0.0.3 pre release

Compassionate Coyote

Jan 28, 2016

  • Improved robustness of asynchronous worker threads
  • Better overlapped I/O for asset streaming
  • Pool allocator used by asset subsystem
  • Shader validation on asset packing
  • Basic render command implementation and GPU asset uploading

Rival Fortress v0.0.2 pre release

Buoyant Badger

Jan 27, 2016

  • Remove SDL dependency in favor of GLFW
  • Implemented multithreaded rendering path with shared GL context
  • Better font packing and TTF font embedding for debug font (encoded as Base64)
  • Basic HUD debug rendering (lines, rectangles, circles)
  • Basic Blinn-Phong lighting implementation
  • Initial Linux support

Rival Fortress v0.0.1 pre release

Angelic Armadillo

Jan 17, 2016

  • Initial OSX and Windows platform layer
  • Asset packer for textures, OBJ models and shaders
  • Simple text rendering with bitmap fonts
  • Basic debug HUD with memory usage and timing information (F3 to open)
  • Basic Lua integration using LuaJIT