The quality of a real-time strategy game relies on low-latency responsiveness and vertical scalability. Vertical scalability requires parallelism on the local instance and lockstep networking. Lockstep systems require a totally deterministic engine. In addition, extensibility is a useful feature.
Laplace is an interactive multimedia framework that provides the deterministic and extensible engine with concurrency support and lockstep synchronization.
Official repository: GitHub
Work in progress...
The project is far from complete.
- C++20 MSVC/Clang/GCC for the compilation;
- Python3, Cmake, Git for building and tools;
- OpenGL for all the graphics;
- wolfSSL for encryption algorithms (ECC/Rabbit);
- FreeType2 for font rendering;
- googletest for the test suite;
- google/benchmark for benchmarks.
To build the project CMake 3.18, Git and Python 3 are required. Make sure your compiler supports C++20.
- Execute the build script.
python3 build.pyDone!
- Configure and build the project.
cmake -D CMAKE_BUILD_TYPE=Release -B build -S .
cmake --build build --config ReleaseLaplace CMake configuration options:
LAPLACE_ENABLE_EXE- build the executable.ONby default.LAPLACE_ENABLE_LIB- build the static library.OFFby default.LAPLACE_ENABLE_TESTING- enable testing.OFFby default.LAPLACE_ENABLE_COVERAGE- enable coverage reporting.OFFby default.LAPLACE_VERBOSE- enable verbose logging of Laplace.ONby default.
Tests will be created if LAPLACE_ENABLE_TESTING or LAPLACE_ENABLE_COVERAGE is ON.
To build only dependencies set LAPLACE_ENABLE_EXE to OFF.
If you want to build the source code by hand, follow the instructions below:
- Use
tools/build-deps.pyto build dependencies. - Use
tools/gen-gl.pyto generate OpenGL interface files. - Use
tools/embed.pyto generate embedded data source files.
cd tools
python3 build-deps.py
python3 gen-gl.py
python3 embed.py
cd ..Add source to the project and build manually. Required headers will be in include folder, libraries will be in lib folder.
If you want to generate Visual Studio project files, use tools/gen-vs.py.
If you change the source code files structure, use tools/gen-cmake.py to generate CMakeLists.txt files.
To contribute, follow these steps:
- Find an applicable issue or create a new one with feature proposal or bug spotting.
- Fork the repository.
- Write tests for the issue.
- Implement your solution for the issue.
- Follow C++ Core Guidelines.
- Use ClangFormat and
snake_case.
- Make sure all tests pass and cover your code.
- Make a pull-request to the
devbranch or to the corresponding feature branch if there is any.
We have just started organizing the project. If you want to help, contact me.