Data-oriented voxel game engine
C++ C Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
asset
bin
doc
include
save
screenshot
script
shader
src
test
tool/count
.gitattributes
.gitignore
IDEAS.md
README.md

README.md

Computer Game

This is a modular voxel game engine. It features an ECS architecutre, message-passing system and advanced rendering techniques. I started rewriting the engine from scratch a while ago with multi-threading built in from the beginning and an automated cross-platform build system. Here you can find the new repository which is work in progress.

Screenshot

     

Features

  • Deferred Rendering
  • Edge detect anti-aliasing
  • Screen space ambient occlusion
  • Scripting
  • Physics and collision
  • Dynamic character controller
  • Procedural voxel based terrain
  • Automated storing of entities to database
  • Normal mapping and specular mapping

Dependencies

  • Assimp Open Asset Import Library (3.0)
  • Bullet Realtime Physics Simulation (2.82)
  • GLEW OpenGL Extension Wrangler (1.10.0)
  • GLM OpenGL Mathematics (0.9.5.2)
  • libzip Zip Archives (0.11.1)
  • SFML Multimedia Library (2.1)
  • SQLite SQL Database Engine (3.8.1)
  • V8 JavaScript Engine (3.24.40)
  • zlib General Purpose Compression (1.2.8)

Instructions

If you just want to play the game on Windows, use the available binaries for each release are what you need. Just click the green button under a release to download the archive and run the *.exe file. This might require a newer Windows version.

For development, there are Visual Studio 2013 project files included. I also provide prebuild libraries for the Visual C++ compiler. You need to build the dependencies and put thier static LIB files into the bin directory first.

Savegames

Savegames are stored in save/. Modify the settings file located at script/settings/init.js to specify which save game should be loaded at startup. The default name is world. If the name doesn't exist yet, a new world is created.

Savegame: [ 'string', 'world' ],

There are also scripting functions available for creating new worlds and switching between them at run time.

Scripting

The scripting language is JavaScript. You can access the in-game scripting console by pressing Tab. It's only visible in debug mode, though. To enable debug mode, blindly press Tab, type in debug() and hit Enter. You can now see debug information on the screen like the scripting console, frames per second, number of loaded meshes, coordinates of the camera, and so on.

Documentation can be found in the List of Scripting Functions.

Controls

Settings and global actions

Key Action
Esc Exit the application.
F1 Toggle mouse capture for camera movement.
F2 Toggle wire frame mode.
F3 Toggle collision shapes debug draw.
F4 Toggle vertical sync.
F11 Toggle between fullscreen and windowed mode.
Tab Toggle scripting console.

Interaction with the world

Key Action
Mouse Left Mine selected block.
Mouse Right Place a block.
Mouse Middle Pick type of selected block.
1 to 9 Change type of block getting placed.

Inserting test objects

Key Action
Ctrl+C Insert a capsule body.
Ctrl+V Shoot a cube in view direction.
Ctrl+B Place barrel on the floor.
Ctrl+N Insert a big rock.
Ctrl+M Set a shrine.
Ctrl+X Insert a big cube with the material from the texture variable.
HOUSE Insert a procedurally generated house.

Known Bugs

  • Switch to fullscreen doen't work
  • Testing on intel tablet, the screen pass doesn't work after resize
  • Material live reload is not reliable
  • Two unneeded framebuffer creations fail at startup
  • Stencil doesn't work in all cases
  • Out of range chunks aren't freed completely
  • One can sometimes jump when in air