Prosumers and Natural Selection 2
One of the amazing things we noticed with Natural Selection was how much players modified the game. Sites like modNS have been quite popular and added crazy behavior like lerks that could carry other aliens, fireworks in the ready room, phase gate menus for choosing where you appear, and other enhancements. Many of these changes have become essential fixtures in the game, either due to the number of servers that are running them or because we liked the idea so much that we incorporated the idea into the official game.
This whole idea of blurring the line between producers (game developers) and consumers (players) has been happening increasingly all over the web and coined a new term - prosumers. Of course, this is no new concept to us or you, as you all know we "modified" Half-life to create Natural Selection. It seems only fitting then that we embrace, not fight, the changes NS players make to the game.
...and that's exactly what we're doing for NS2. Not only are we encouraging "hacking" but we want you guys to be able to create all new gameplay with a minimum of work. Instead of using metamod to hack in extra functionality, we're providing a full API for players to access. This really is nothing new, but we're hoping to make this so easy and so powerful that we will see tons of new gameplay appear, with no extra work from us This is especially important to us as we are only two full-time people so we have to be creative about providing extra value.
The other huge advantage is that the faster and easier we can make it for players to modify the game and experiment, the faster and easier it can be for us as well. If we can speed development and experimentation for everyone, not only will our players get more value, but we'll ship the game faster. Here's the way we're doing this with Natural Selection 2.
We've added LUA scripting language support to the Source engine (this is done expertly in Garry's Mod and we've learned a lot by looking at it and talking to him). We are then treating the game more as a library or API, with most of NS-specific code implemented in this scripting language. This includes things like setting up the tech tree (including costs, research times, dependencies), spawning (wave spawn, spawning at structures, etc.), the resource model and even how all the structures work. Here's some example code that shows how armories currently work in NS2:
Let me point out a couple key points here: The Armory class is completely defined by the .fgd and this script file. Translation: you can add new structures to the game after we release it. This also means maps can pre-place structures, allowing for more scenario-type maps. The StartUsing and StopUsing functions get called by the game automatically, which means that +using the armory pops up a menu for that player, allowing them to buy stuff. What can be bought, the prices and the actions of buying stuff are all controlled by the script.
What's especially great about this is we can launch the game, play around with some behavior, then we can edit script code and reload the map and have our changes take effect instantly. We're still working to have the changes applied instantly, but if we (Max) can pull this off, we will literally be able to change the game while we're playtesting. Want to try some wacky new resource model during a playtest? Give me 2 minutes to code it up in LUA, execute the command to reset the game and voila. Want to try a new structure? We could use an existing structure as a placeholder, code it in LUA real quick, modify the tech tree and it's working in minutes. Doing this in C++ would require more code, more risky code (you can easily write code that could crash the server, where as script is "insulated") and then you have to shut down the server and restart it.
The much-touted Web 2.0 marks a new era, one where those that will succeed are able to leverage the vast talent outside their organization instead of just inside it. Maybe the next Big Thing in online strategic shooters will come from you?
2/15/07 clarification: I forgot to qualify a big point here: even though we want to encourage modding of NS2, we will definitely maintain our own "core" gameplay that is the main game. We will draw an obvious distinction between "core" NS2 and "custom" NS2. We'll probably do this by making the server browser default to showing default "NS2" servers, and then having a "custom games" tab or something that shows only modified servers. Hopefully this way we get the best of both worlds.