DarkForge Screenshot


The DarkForge Engine was started around the twelfth month at Full Sail University as a side project. It's goal was to simplify future projects using DirectX and to test engine design theories that I both read and thought about. So far it has been used in The Passage, my Match game, and in numerous spike solutions to offer rapid development. The engine is split into two main pieces: the renderer and the UI system.

The Renderer

DarkForge's renderer, built on top of DirectX 9 API, is built with containment in mind. The user of DarkForge should not have to do much in the way of helping DarkForge along, only to start it up and tell it to update and render. However, the pipeline is pretty normal for now, consisting of render context's that help to batch up render objects for the video card to render. The steps involved to get a cube rendering to the screen is less than five from the user's perspective and tries to not limit the user from doing what he would like to do.

The User Interface System

The user interface is a much more complex system, inspired by World of Warcraft and powered by XML and LUA. Using this user interface system, for example, I was able to program my Match game with as little as five lines of code in C++ written specifically for the game. While far from complete, this system is designed for ease of use and flexibility.

Using this system, you can be sure that when you get a button rendering on screen, that it will work. When the mouse scrolls over, it will highlight, and when the mouse clicks down it will change again. Finally, when the mouse is released, the specified function will be called to take action. Other controls include: textboxes, windows, and sliders.

Early in the development, it was decided that knowing whether 255 different keys on the keyboard were being held down, just pressed this frame, just released, or no action, would be ill concieved. At most the user may use a handful of keys in that way, and the rest would just need to know if it is down or not. Building on top of DirectInput, my input manager can be told to monitor certain keys for their states and further to call functions when those keys reach their states. This allows the system to not do more work than needed every frame and is very easy to setup for the user.

Future Work

DarkForge is far from finished and some of the most expansive work is yet to be done. A new rendering pipeline using DirectX9 and multithreading is being prepared, based off of reading from "Camera-Centric Engine Design for Multithreaded Rendering" by Colt McAnlis in Engine Gems and "Practical Thread Rendering for DirectX 9" by David Pangerl in GPU Pro. Further, DirectX11 will be added to the engine in the near future.

Other work includes scrapping DirectInput since I learned that it is simply built on top of the windows message system. Finally, the user interface system needs a lot of work to expand and make usable. More power and flexibility is key moving forward with it, and only thorough use can decide whether some of my decisions were good or bad.

Projects Using DarkForge


The Passage



Powered By Lua
Visual Studio

Site Development and Design by <CS>

Graphic Design by Nathan Schoell