darkHAMMER Game Engine
Dark-Hammer is a light-weight, open-source, multi-platform game engine.
Engine itself is written in C programming language (following C99 standard), works with both OpenGL and Direct3D APIs.
Current supported platforms are Windows 7 with Direct3D 10 or higher capable graphics card, Linux Ubuntu 12 with OpenGL 3.3 or higher graphics card, MacOSX 10.8 (Mountain Lion) with OpenGL 3.2 or higher capable graphics card.
In order to compile and build the engine you'll need softwares below, to be installed on your system :
- Mercurial (Hg) client: For pulling source from the server. link
- C99 compatible compiler: Tested ICC 12 for windows (MSVC2013 should have C99 support too), GCC 2.6 for linux, and Clang 3.3 for OSX
- Python 2.7: Used for many tools and waf build system. link
- Physx 3.2 SDK: Physx is the primary physics SDK for the engine. link
- Latest Graphics Drivers for your OS: nVIDIA or AMD drivers.
- DirectX SDK June 2010: For Direct3D build under windows. link
- X11 libs: For X11 window system (GLFW) compilation. (Package: xorg-dev)
- Mesa GL libs: For GLX support (GLFW) compilation. (Package: libglu1-mesa-dev)
Additional (Not required)
- SWIG: For rebuilding/modifying lua or python bindings. link
- Python development libs: For linux (Package: python-dev)
- PyQt4 for python 2.7: Used in many GUI tools. (Required for python tools) link
Preferred build system is waf which is a python based build system,
and is included in the source repo under /path/to/dark-hammer/var/waf/ directory.
To build with waf, make sure you have installed all above requirements, open up a command terminal , go to your desired directory and run these commands:
hg clone https://bitbucket.org/sepul/dark-hammer cd dark-hammer python var/waf/waf configure --physx_sdk=/path/to/physx_sdk python var/waf/waf python var/waf/waf install
By default, these set of commands will find an appropreate compiler and build the code in release mode, then install the shared libraries, binaries in dark-hammer/bin and static libraries in dark-hammer/lib directory. You should also provide a valid path to Physx SDK root directory in --physx_sdk argument.
For debug builds (which output files will have -dbg suffix), just add _debug to build and install commands:
python var/waf/waf build_debug python var/waf/waf install_debug
Python module build
To build python module, add _pymodule to build and install commands:
python var/waf/waf build_pymodule python var/waf/waf install_pymodule
This will build and install platform dependent engine python module files under
Note that you must install python development files for your OS, before building python module.
These arguments can be used with
--dx_sdk=PATH: For windows and direct3d builds, this argument is also required. In that case, you should provide this argument as example:
python var/waf/waf configure --physx_sdk=/path/to/physx_sdk --dx_sdk=/path/to/dx_sdk
If you want to change compilers, for example use 32bit ICC compiler on windows:
python var/waf/waf configure --physx_sdk=/path/to/physx_sdk --dx_sdk=/path/to/dx_sdk --msvc_targets=ia32
For more information and flags check out waf's documentation
--prefix=PREFIX_PATH: PREFIX_PATH can be a valid path which you want to install the build files, instead of default path.
--assert: Enables assertions in the build, recommended for debug builds.
--retail: Enables retail mode build, enables all retail optimizations.
--prompt: Prompts for sdk paths, if not provided by user in command line.
--gfxdevice=[D3D|GL]: Choose a valid rendering device (D3D or GL).
--physx_sdk=PATH: Path to Physx SDK root directory.
--profile: Enables profile build, which engine stores profiling information in runtime and can be connected via a browser through port 8888 for profiling information.
Visual Studio 2010
Additional MSVC2010 projects are maintained seperately and included in
/path/to/dark-hammer/src/vs2010 (for main builds) and
(for 3rdparty library builds).
First you have to open the solution file for 3rdparty libraries and build them successfully. Then open main solution file and build those.
Unforetunately, prior to Visual Studio 2013, Microsoft has no support for C99 compilation, so if you are working with Visual studio 2012 and lower, you'll need to install C99 compatible compiler for windows like Intel Compiler (make sure you install the visual-studio addon too).
Note that you should also provide valid SDK paths for DirectX and Physx for your visual studio project. In case you don't know how, open visual studio, open main solution file, right click on engine project in Solution Explorer, Select Properties from drop-down menu, then go to Configuration Properties->VC++ Directories, Add DirectX and Physx include directory paths to Include Directories, and Library directory paths to Library Directories. You should do the same for h3dimport project if you want to build the importer tool too.
To run the test program (game-test), you should download media files for this build, and copy them into dark-hammer/test-data directory.
Some current known issues (help is very much appreciated):
- Overriding window management doesn't work for Non-windows versions (app_init with wnd_override), This is (in part) because of glfw design flaw in decoupling window and context management.
- OpenGL performance suffers, comparing to Direct3D implementation
- Shadows in OSX (OpenGL 3.2) version is not working properly
If you have any questions, suggestions or bug reports, please post to developer's forum.
- Engine Developer: Sepehr Taghdisian (firstname.lastname@example.org)
- Tools Developer: Amin Valinejad (amin67v@hotmail), sharphammer
- MacOSX port and build tools: Davide Bacchet (email@example.com)
This software is made possible by the following open-source projects:
- Assimp: Open asset import library (link)
- efsw: File system monitoring library (link)
- nvtt: NVIDIA texture tools (link)
- glfw: An OpenGL library (link)
- ezxml: XML parsing library (link)
- mongoose: Lightweight web server (link)
- stb_image: Sean Barret's C image loading library (link)
- lua: Embedded programming language (link)
- gl3w: Simple OpenGL profile loading library (link)
- cjson: C JSON library (link)
- sfmt: SIMD - Mersenne twister random generator library (link)
- zlib: Compression library (link)
- Qt: Qt Application framework (link)
- PyQt4: Qt4 Python bindings (link)
- SWIG: Binding generator tool (link)