Serious Sam 2 Development Diary #1
By Jason "Rodzilla" Rodzik - July 19, 2005
By Roman Ribaric, CEO of Croteam
When we set out to create Serious Sam II we realized it would be really hard, impossible even, to connect our engine to any of the existing level editors available on the market. Since our engine uses so many advanced technologies that arenít in other games and editors we had to custom make a level editor. We even decided to abandon the original Serious Editor and build a new one from scratch to be able to implement all of the advanced features of the Serious Engine 2.
The Serious Editor 2 is much more than just a plain level editor. Itís more like a complete game development environment, designed to allow a designer to fully control all possible segments of the game. Various small editors are implemented into Serious Editor 2 that allow in-place editing of each game resource. These include a custom made editor for meshes, animations, destructions and fonts, as well as numerous others, like the simulation editor that allows a user to exit from the playerís body and take complete control over running the game from the editor. In the middle of a fight the user can switch to edit mode and modify elements of an active game, like stopping flying rockets, moving enemies around, destroying things, adding new items, etc.
Simultaneously developing a game along with its engine and editor is indeed as hard as it sounds, but it is also very rewarding. When you develop a general-purpose engine, you have to think about it having a clean and open design. It means that the engine must be able to run all kinds of games, not only games that you are developing in conjunction with the engine. Also, it has to be able to adopt, with ease, all the new technologies that will be added to it. This is also true of the editor. It is of crucial importance for game engines to be developed along with top quality games. The engine could never get the necessary sharpness and refinement if it werenít tested on a real-world project. Proof of excellence can be assigned to an engine only when it is able to run a AAA title.
And therein lies the challenge. Creating your own engine is a challenge itself. The art of coordinating different engine modules with the common goal of making the whole work flawlessly is a part of that challenge. The ability to develop such a fine-tuned creation that can adapt and transform as the needs and imaginations of its users grow, is yet another part of that challenge. Making a cutting edge engine sharp, fast, modest in requirements, and showy in features is again, another part of the challenge. The acceptance and approval of others seeing such an engine deployed is great pleasure.
However, the greatest challenge is making all this easy to use. Usability is key; this was our mindset when we set out to rebuild the Serious Engine Editor. The Serious Editor 2 is capable of creating, editing or viewing different types of resources. For example, you can create or view 3D model documents, text documents, textures, fonts, and most importantly, many kinds of your own specific document types, like material documents, particle effects, shader presets, documents describing puppets and their behavior, projectile physics, camera parameters, global game parameters, documents for describing players, head up displays, etc.
Editing of resources is separated to logical aspects, for example some model document can be edited in:
- Mesh editor - vertex/polygons editing, UV maps adjustment, etc...
- Animation editor - adjusting of bones in animation frames, playing
- Collision editor - editing physical properties of model's parts.
- Destruction editor - editing of model destruction, defining particle effects and debris that will be created on model's destruction, defining
model which will substitute this model after destruction.
- Skeleton editor - editing model bones and connecting them with meshes.
- Model editor - editing of all mentioned data manually, through model
In each of these sub-editors, special tools are activated.
This example shows the editor's good hierarchical organization.
On the programmersí side, we have implemented a meta-data system into the editor. When some data is edited, you know exactly which member is changed or read from what file. The editor can import/export resource documents. With this, you can work on the same resource in multiple applications. For example, you can export a model to a 3D application.
The editor can also work on different operating systems (Windows and Linux). We have developed our own graphic user interface so it looks and behaves exactly the same no matter which OS it is running on.
It can also communicate with the Perforce server application, which is very important when you are working on a group project.
So why make our own engine? Back when the first Serious Sam was built, our team consisted of a group of enthusiasts trying to break into the game market. Unfortunately, this meant that publishers were not interested in taking a look at anything short of a full game. That meant that the team depended on themselves to provide all resources for the gameís development. Our team had to rely on our own knowledge and abilities to create a game engine that would best suit the type of game we wanted to create. This was an all-out action shooter with bright, open spaces and tons and tons of enemies on screen at once. Both the game and the engine did a great job in achieving this goal, resulting in a very successful game that became known for exactly those features and for really pushing the hardware to the maximum. As proof of this, Serious Sam was widely used by hardware sites as a benchmark tool used to compare performances of new hardware. After that, the game engine was constantly improved and two more games were released on later versions of the engine (Serious Sam: The Second Encounter and Serious Sam for Xbox). Our team kept the engine on-par with all existing top-of-the-line game engines of the time and continued to use everything the hardware could offer.
When the work on Serious Sam II started, we were very confident in our ability to produce a cutting-edge game engine that would be able to match any other game engine both in performance and in supported feature set. The content department was intimately familiar with the workings of the engine and was able to put their skills to use to their maximum ability. Given all of these reasons, it was only logical to continue in the same manner and to build our own engine. Also, to be fully competitive, we wanted to have full control of every aspect of game development, including the feature set provided by the engine. Other games don't even have similar game play as Serious Sam, so we had to be sure that the engine could meet all requirements presented by the chosen game play style. These, traditionally, include being able to confront wave after wave of enemies, alone or with friends in cooperative mode (one of Serious Sam's trademarks). Because of all these, building our own engine was the only logical choice.
Our engine incorporates all the advanced shader effects, like per-pixel lighting with normal-map bump-mapping, parallax (or offset) mapping, and a lot of nice reflections and refractions. On top of that, there's a very powerful terrain shader which can blend up to 8 textures in one pass. That can be very handy, especially when it comes to texturing vast environments.
And when a game like our upcoming title Serious Sam II has that many open and bright worlds, we also choose to go with complete support for true HDR rendering. Of course, a nifty bloom post-processing effect on top of that makes everything look really shiny and life-like.
From the performance side, the engine can stretch big-time. On one side, it supports even pixel shader model 1.x (which makes the game playable on older hardware), but at the same time the engine fully utilizes all the bells and whistles of new technologies like, for example, NVIDIA SLI (with really high efficiency rate!).