Many people seemed interested to learn more about the Spark Engine. Is it just the Editor? Or the entire game? Lead engine programmer Max answers these questions and gives some cool insight into how the programming workload is divided up at Unknown Worlds.
Posted by _Xero_ on Feb 4th, 2010
We often get questions about the technology we're building for Natural Selection 2. With this in mind, I've written up the first of a several part blog post to answer some of the more common and interesting questions. My initial call for questions generated quite a few, which I intend to address in depth, but first I'll start with two of the more general questions.
Andreas asks: What is the Spark engine? Is it the whole game engine or just the graphic part?
This is a great question to start with. Spark is the entire game engine and tool set we're using to build Natural Selection 2. This includes the graphics, sound, networking, physics, scripting, path finding and effects system (probably others too). It also includes tools like the Editor, Builder, Viewer and Cinematic Editor.
When Charlie and I started working on Natural Selection 2, we weren't planning on building an engine. Creating technology is a lot of work and it's also very challenging to build a game - both in terms of gameplay and artwork - when the engine isn't finished. When we ultimately decided that we were going to create our own engine, we wanted to make sure the technology was flexible enough that we wouldn't have to start again from scratch for the next game. We also wanted to make sure that other people could use our engine to make their own games. To this end, the technology is designed to be largely independent of the game. Spark is coded in C++ and provides the core functions of managing a virtual world. But Natural Selection 2, which is entirely programmed in Lua, adds the common elements of first-person shooters (players, weapons, score, etc.) and the Natural Selection-specific pieces like commander mode, tech trees, wall walking, etc.
The division of labor for the coding has always been very straightforward – Charlie writes the Natural Selection 2 code and I write the engine/tools code. A few months ago, Kurt Miller, a great programmer and a good friend of mine, joined Unknown Worlds to work on the engine and tools code as well.
For the past two months we've released weekly patches to the editor. Often people interpret these editor-specific updates to mean that we're not making progress on the game. In fact, even when we were crunching the hardest on the Editor - right before the initial release – Charlie was still devoted full-time to the game code. Now-a-days, Kurt and I spend most of our time enhancing the engine, with Kurt spending a small amount of his time implementing new features and bug fixes in the editor.
Beat Wolf asks: What platforms will be supported? (Linux, OS X, XBox, etc..) The web page still mentions Linux and OS X as target platforms, but there have been many doubts with the inclusion of Steamworks and because the question seems to be avoided for some time now.
Well let the issue be avoided no longer! Currently our engine and tools only work on Windows, and that will be the only platform Natural Selection 2 will be available on at release. However, most of the engine is not platform specific. The largest Windows-specific piece is the low level rendering code which is built on Direct3D. In the interest of having our engine run on Linux and OS X someday, this low level rendering code is wrapped up so that it's mostly separate from the rest of the engine. With a small amount of effort, we can swap out this piece with an OpenGL implementation that will work on Linux and OS X. All of our tools are built using the cross-platform wxWidgets framework, so once we get the engine working on another platform, bringing the tools over won't be too much work.
Now that I've convinced you that we've taken steps to allow us to bring our engine to other platforms, you might be wondering why we don't just go ahead and do it. The answer is simple; we don't have the time right now. As an alternative to doing it ourselves, we've considered "open sourcing" or publishing the low-level APIs for the pieces that are Windows specific and inviting community members to contribute their own implementation. If you like this idea let me know in the comments.
Now the issue of Steamworks. For those of you who don't know, Steamworks is the core technology of Steam, like the friends list, server browser and voice chat. We've integrated Steamworks into Natural Selection 2 because it saves us the effort of implementing these things ourselves, and gets the game into your hands faster. Unfortunately Steamworks (which essentially is the Steam client) only works on Windows. We've setup Natural Selection 2 to work without Steamworks, but you lose the services that it provides. For example, instead of being able to browse for a server you'd have to type in its address in the console to connect to it. For an OS X or Linux client, we'd have to substitute in our own implementation of those missing services. This certainly isn't out of the question for a post-release update to the game, but it's not something we'd delay the initial Windows release to incorporate.
I should add to this discussion, that none of this applies to running dedicated servers on Linux. Dedicated servers don't require graphics, input or any of those other platform specific things. And one of the great things about writing all of the game code in Lua is that it's inherently platform agnostic. Dedicated Linux server support will be in the initial release.
If you have more questions you'd like to see answered, feel free email me at firstname.lastname@example.org. The more specific the better!