An experimental framework for low latency, high fps multiplayer games
C C++ Objective-C Haskell Assembly Python
Latest commit c966baa Oct 4, 2013 @TTimo add a fixed tick timer
Permalink
Failed to load latest commit information.
binaries cmake working on Linux Aug 31, 2013
bsp_src more fixes to support the VM build Aug 22, 2013
head_src and missed most of the files Jul 14, 2013
network add a fixed tick timer Oct 4, 2013
scene_load_src
site_scons create osx bundle to wrap around the compiled targets Jul 26, 2013
template_src and missed most of the files Jul 14, 2013
.gitignore
CMakeLists.txt typo Sep 17, 2013
LICENSE
OSX_wrap.h OSX: SDL syswm only gives the NSWindow, still needs a loop to grab th… May 19, 2013
OSX_wrap.mm OSX: SDL syswm only gives the NSWindow, still needs a loop to grab th… May 19, 2013
README.md update the readmes Jul 14, 2013
SConstruct create osx bundle to wrap around the compiled targets Jul 26, 2013
SConstruct.Windows use public SDL API for getting a native window handle May 16, 2013
bsp.vcxproj more fixes to support the VM build Aug 22, 2013
bsp.vcxproj.filters add msvc project files for the new target Jul 26, 2013
es_core.sln
game_main.cpp fix the win32 compile, need to add the other targets Jul 5, 2013
game_main.h rebuild the head demo in the reorganized framework Jul 4, 2013
head.vcxproj
head.vcxproj.filters added head control msvc project Jul 13, 2013
main.cpp OSX compile fix Jul 26, 2013
render_main.cpp and missed most of the files Jul 14, 2013
render_main.h pass the mesh to load on the command line Jul 3, 2013
scene.vcxproj more fixes to support the VM build Aug 22, 2013
scene.vcxproj.filters more projects Jul 13, 2013
template.vcxproj more fixes to support the VM build Aug 22, 2013
template.vcxproj.filters add template Jul 13, 2013

README.md

Overview

es_core is an experimental framework for low latency, high fps multiplayer games.

Goals

Please read http://ttimo.typepad.com/blog/2013/05/es_core-an-experimental-framework-for-low-latency-high-fps-multiplayer-games.html [3] for a general introduction and some background about this project.

Architecture

Each logical part of the framework executes in it's own thread. The input thread (main.cpp, also doing the initialization), the game thread (game.cpp) and the renderer thread (render.cpp). The threads communicate with each other using a lightweight messaging system, backed by ZeroMQ.

ZeroMQ provides a safe and efficient abstraction for thread communication. For more details, see 'Multithreaded Magic with 0MQ' [1]. This design also enables easy support for other languages in the future.

The game thread runs on a fixed tick and feeds an interpolating renderer locked at the display refresh speed. On each tick, the game thread updates it's internal state and produces a new render state for the renderer to interpolate towards. For more details on this approach, see 'Fix your timestep!' by Glenn Fiedler [2].

Demo applications

See binaries/README.md for a summary of the applications provided for testing and demo purposes. You can download the latest set of compile binaries from https://s3.amazonaws.com/es_core/es_core.binaries.zip [4].

Compile

You will need to obtain and compile the following dependencies:

At the time of writing, SDL 2.0 is only available from Mercurial, and Ogre 1.9 RC1 was just released but this code was not updated and still uses 1.8.

If you compile for GNU/Linux or MacOS X, you will need scons: http://scons.org/

Windows

Use the Visual Studio 2012 project files (MSVC Express will work)

MacOS X

Compiling Ogre 1.8 is likely to give you the most trouble. You will need basic familiarity with cmake, and you may have to fix a few things by hand. I use macports for all the Ogre dependencies (boost, libzzip etc.).

The demo only targets the x86_64 architecture at this time, and ignores i386. You may need to edit the XCode project generated by cmake to set that up. You may also need to install the libraries through macports with the +universal option.

Invoke scons at the top of the es_core folder once you've compiled the dependencies.

GNU/Linux

Should present no particular difficulties. Invoke scons at the top of the es_core folder once you've compiled the dependencies.

License

This source code is released under the "Modified BSD License". See LICENSE for details.

Feedback

Yes please! The best feedback is code and patches. I can also be reached on IRC easily, look for TTimo on Freenode or Quakenet.

References