New CS:Source Map de_tension
My return to mapping is now official with the remake of de_tension for CS:Source. This new map includes a novel mapping technique conceived by Andrew Penry and myself called Dynamic Mapping.
The original de_tension for CS 1.6 was one of my first large mapping projects. I returned to de_tension because I wanted to ease my way into mapping again—and what better way than to build a map that was already laid out? Tension is the first of three planned remakes. I will also remake de_sacrelige (which will be properly named de_sacrilege) and de_stonehenge before starting completely new maps.
The idea that I was going to ease myself back into mapping was misconceived. The tools added to the Source Engine were greatly expanded since CS 1.6 (and the Half-Life 1 engine). For mappers who have kept up with Valve have known all this for a while; many people already think of the Source engine as old—but for me they were new when I started remaking de_tension sometime in 2008. I did not expect to wait until the end of 2009 to get this map out.
It took so long because I have been forced to learn many new tools and techniques to get the map right. Even now, when I am about to release the map, it is not exactly where it could be were I able to work on it full time... but it is far more advanced and polished than any map I've done in the past. A discussion of some of the areas I could have polished more but chose not to is at the end.
One of the most exciting things about this map is that it introduces a new mapping technique called Dynamic Mapping. That's what I call it, at least. The idea is not new in gaming... but it is new to CS (as far as I know—I've never played a CS map that does this.) The idea was conjured by Andrew Penry and myself after we had left CS for a couple of years to play Battlefield 2142. We noticed that BF2142 often contained various versions of each map to accommodate the number of players. We liked the idea... and we wanted to bring that to CS. What's more, we wanted to make the map dynamic at runtime rather than as a static variable set on the server. Thus we created dynamic mapping. Actually, Andrew figured out the technical details and taught me how to implement it.
Tension comes in two flavors... de_tension2 and ww_de_tension2 (the #2 denotes a recompile that was necessary after CS updated to the Orangebox engine in mid 2010). ww_de_tension is the dynamic version of the map that changes depending on the number of players in the game. At the beginning of each round, the map counts the number of players and opens/closes certain paths. This method allowed me to create a map that can accommodate both large and small crowds (overcoming the problem many large custom maps have when crowds are small). The ww_ prefix stands for "Wall Worm” which is the mapping/design group that I belong to (and is a fitting label for this type of map). Any future map that I make that comes with a dynamic map version will follow the same pattern.
In ww_de_tension there are three points that open up at different crowd sizes.
- 6 Players - South tunnel opens
- 12 Players - Path under bridge opens
- 18 Players - Grates in water open
By reducing the available paths when crowds are small, you give the counter-terrorists a chance to cover a map that would otherwise be too large.
Making Tension for Source was no simple feat for me. It required me to learn many new tools and technologies that I did not expect to learn when I started the process. When I sat down to remake de_tension, I intended to learn how to make models in 3D Studio and export them into my map. Little did I know that just that process alone is far from simple.
Despite the availability of the Valve Developer website, I found the process extremely difficult. Documentation is usually limited if present at all. Even after reading the online documentation for making models, it still took a lot of trial-and-error just to do a simple thing like translate textures on models in 3DS to the game.
As I played more and more Source maps, I found myself wanting to go above and beyond the average map. As a result, I started learning more and more. So adding custom models was followed by creating custom sounds and soundscapes, custom blend textures, setting up detail sprites and models, and tweaking the lighting. On several occasions I could not really find out how to do what I wanted to do on the Valve Developer site; lucky I sometimes found answers elsewhere. More times than I expected, I only found answers after experimentation.
One of the main results of learning how to bring models from 3DS Max to Source games was the creation of a new MaxScript plugin. Andrew Penry and I applied our general programming knowledge to MaxScript and wrote the SMD Collisionmodel Prep 3DS Max Tool. The tool removes a couple tedious and repetitive steps when creating collision models in Max.
I did run into some limitations of mapping/modeling in Source. One of the things I wanted to do was create self-illuminated models that also cast light onto the environment. The effects I wanted to create with the crystals in the caves could not be accomplished because detail sprites do not light well, do not cast shadows, nor do they give off light (to the surrounding world). One wish list for future versions of Source is the ability to use model textures to illuminate the world via radiosity in the same manner that you can have world textures give off light by declaring them in the lights.rad file.
Another limitation in Hammer (Valve's map editor) is that it should have more integrated tools to edit the various parameters of elements (why can't designers change material properties directly in Hammer?) Editing the light/radiosity of textures should also be integrated into Hammer. Forcing mappers to open up multiple text files outside of the development tool is inefficient.
Despite the limitations of the Source SDK/Hammer, I eventually became more comfortable with the Source process as time went by. When I started making my first model, it took me over a day to complete one properly. Now I can make several completely textured models in a day.
This version of tension is heads and shoulders above the version for 1.6. Custom models, sounds and displacements make this version much more appealing to the eyes. At the same time, I did cut some corners. Most of the flaws are texturing flaws.
There are places that the texturing is not perfect—some displacements have stretched textures. Some of the models suffer from tearing or other flaws (I did not learn about the effect smoothing groups have on texturing or the Render to Texture Padding option until I had already completed half the models in the map). Most of the model texturing flaws I hid rather than recompile.
One of the most obvious texturing flaws is the stone arch on the CT side of the wooden bridge and the two stones on the T side of the bridge. I did not take the time to merge the colored leaves covering those rocks with custom decal textures. As a result, the transition form displacement texturing to the colorful leaves on the stones is overly abrupt.
Probably the most embarassing flaw is a place just northwest of Bombsite A where the displacement does not make it to the ground. There are other oddities in the displacements on the map that I could have made better had I known more about some of the "proper" techniques of working with displacements--I did not understand the sew function until after I had finished this map.
Another flaw with the stone arch on the CT side of the bridge is that the collision model does not accurately match the shape of the arch. This means that there are some areas above the arch that you can see through but cannot shoot through.
The power lines are thicker than they realistically should be. Despite being the smallest size of the rope entitity allowed, they appear thick because they are in the 3D skybox--which multiplies their size by 16.
I originally intended for the detail models in the caves to be more developed. But as I learned about the limitations of detail models, my enthusiasm diminished.
The wooden bridge, also, was an area of the map that I originally intended to be a special novelty. Andrew Penry created a prototype bridge that used physics to react realistically when walked on. Each element (plank and connecting ropes) could be shot out and the whole bridge would fall out convincingly. We had several grins thinking about the effects on game play. However, as the FPS of the map dropped with each new model, texture and detail, I finally decided to drop the bridge idea. The lowest FPS on the map from my laptop is over 40fps and over 100fps on my gaming machine; I did not want to compromise the frame rate despite how cool the bridge was.
I could have spent more time to fix these last details, but I have viewed Tension more as a test-run than a full-fledged production. I worked on the map for so long that my knowledge of the Source process is no longer anything like it was when I started. To really make this map what it could be would require me to start over... which I am not willing to do since my attention has already turned to the next two maps. As it stands, flaws and all, it is already much more detailed and polished than many other mainstay custom maps. I'll think of this map as my introduction into Source mapping and a stepping stone to the next maps.
One thing I have noticed when testing the dynamic version of this map is that some players don't "get it”, even after the concept has been explained to them. Some ask what happened to a path in this version (when the last "version” was the same map they had played with a different crowd size). Others never realize that there are "new” paths when more people jump in and stick to the starting routes. That some servers may have more of these kinds of players is why I am releasing two versions of the map so that every kind of gaming group is accommodated.
When packaging the map, I considered packing all the custom content with Pak Rat. I chose not to, however, because the download would be smaller considering both de_tension and ww_de_tension could share the same files. Had I packed them all, the custom content would be packaged twice, which would cause unnecessary redundancy.
Programs Used in the Making of Tension
This is a list of all the programs I used to make Tension. (In comparison, I only used Hammer for the original Tension).
- 3D Studio Max 2010 – Modeling and Texturing
- Mudbox 2010 – Texturing
- Texture Maker Professional – Texturing
- Corel PHOTO-PAINT X4 – Texture editing
- CorelDRAW X4 – Texture generation
- IrfanView – Resampling textures for Level of Detail versions
- GoldWave – Wave editor to make/edit sounds
- Notepadd++ – Text editor for making Soundscapes
- Source SDK and Valve Hammer Editor – Map editor
Other important resources included:
I did learn a few things that might save some headaches. Below are some tips.
Texturing in Max – When applying your texture to a model in 3DS, all that is important is that the name of the bitmap file matches the VTF texture file name. In other words, if your final texture (in Source) is MyTexture.vtf, you should apply a texture to the model that has a Bitmap in the Diffuse map that is MyTexture.vtf or MyTexture.jpg or MyTexture.tga, etc.
Texture Baking – In 3DS, you can easily create flattened textures for your models by using the Render to Texture tool. Something that you should learn quickly is the Padding value under Selected Object Settings. You should probably set that number very high! A few of the models in Tension suffer from a low value and show black "tears” from certain angles/distances. For the most part, I hid these flaws via object placement. To see what can happen if you don't, get on top of the colored stone arch on the CT side of the wooden bridge and look down towards the cave opening on the lower south wall.
Major Problem after the CS:S Orangebox Update
Unfortunately, as of July 2010, de_tension and ww_de_tension are no longer playable. After CS was updated to the Orangebox engine, these maps caused CS to crash. I started a thread on the Steam Forums to get feedback.
I think the problems were either too many displacements cutting into other displacements or too many cubemaps. In either event, I have updated the maps. The new versions are de_tension2 and ww_de_tension2. Learn more about the problem and the fix here.
It was building this map and learning about how painful it was to make props for Source that led me to create the Wall Worm Model Tools.