Using step sounds

In this tutorial I would like to show you how to use different step sounds in your map according to your textures. But before you start, you should make sure that you have installed and configured the Q3Map2 compiler at least version 2.5.16 and the GtkRadiant 1.4 or newer for World of Padman. With older versions, you may encounter errors when using this tutorial.

Step sounds

Quake 3 Arena offers only a limited number of step sounds by default. Besides the standard step sound, the key surfaceparm with the value metalsteps in the texture shader can be used to create an alternative, metallic step sound when the player walks over the corresponding texture. However, the advanced Q3Map2 compiler allows the level designers to include additional step sounds. Without equipping World of Padman with an unnecessarily complex material system right now, we have simply concentrated on expanding this range of step sounds. In addition to the standard step sound, WoP has seven more step sounds that can be integrated into your map in two different ways. In the following all supported step sound values for the key surfaceparm are listed and briefly described.

  • carpetsteps – quiet step noise for carpets
  • latticesteps – loud step noise for metal lattices
  • metalsteps – loud step noise for metallic surfaces
  • sandsteps – quiet step noise for sandy surfaces
  • softsteps – very quiet step noise for soft surfaces, e.g. upholstered furniture
  • woodsteps – loud step sound for wooden surfaces
  • snowsteps – loud step sound for crunching snow

Using clip textures

If you want to avoid writing your own shaders for your textures you can use ready-made textures that already have the desired step sound. We have provided corresponding clip textures in the common directory.

  • carpetclip for carpetsteps
  • latticeclip for latticesteps
  • metalclip for metalsteps
  • sandclip for sandsteps
  • softclip for softsteps
  • woodclip for woodsteps
  • snowclip for snowsteps

This supposedly easy way to implement individual step sounds in your own map can also turn out to be very time-consuming, as you have to cover all corresponding areas with an additional flat brush (1 unit high), whose surface is covered with the desired clip texture. This method is therefore only suitable if you want to add an alternative step sound to a small part of a texture. The following figure shows the concrete cover of a manhole in the Trashmap. There, an additional brush was created over the metal grid in the middle of the texture. The surface of this brush was covered with the texture common/metalclip.

Floor texture with metal clip texture in the partial area

Floor texture with metal clip texture in the partial area

Implementation via a texture shader

The best way to include alternative step sounds in your map is to put the key surfaceparm with a desired value directly into the shader of your texture. The additional effort is that textures that previously required no shader at all now need one. Such a shader for e.g. a snow texture with a sound of snow steps (value: snowsteps) could look like this:

textures/mymap/mysnowtexture
{
   qer_editorimage textures/mymap/mysnowtexture.tga
   surfaceparm snowsteps
   {
      map $lightmap
      rgbGen identity
   }
   {
      map textures/mymap/mysnowtexture.tga
      blendFunc GL_DST_COLOR GL_ZERO
      rgbGen identity
   }
}

The advantage is that you can now use the shaded texture as usual in Radiant. In the game it will then create the alternative step sound for the player when he walks over it. The disadvantage is that you can only assign one step sound to the texture. So this is only suitable for homogeneous textures without a material change.

If you want to use an already existing texture from World of Padman (e.g. a metal texture), which unfortunately did not get a shader with a metallic step sound, you can also write a new shader for it, which refers exactly to this WoP texture. But to not change the property of the texture globally, your shader should look like this.

textures/mymap/mymetaltexture
   {
      qer_editorimage textures/pad_texturedirectory/woptexture.tga
      surfaceparm metalsteps
   {
      map $lightmap
      rgbGen identity
   }
   {
      map textures/pad_texturedirectory/woptexture.tga
      blendFunc GL_DST_COLOR GL_ZERO
      rgbGen identity
   }
}

Notice the difference between the shader path and the texture path. This will cause the texture from WoP to be displayed in the texture directory of your map with the step sound you selected. So the shader only refers to the WoP texture in pad_texturedirectory and provides it with the properties you defined. So you can easily use this texture from WoP without having to copy it manually into your texture folder again. Additionally, our texture properties remain untouched. The important thing is that your shader has a unique shader path.

Notes on Q3Map2Build and Q3ASE

In order for the step sounds you have built into the game to work, you need the parameter -custinfoparms in BSP and LIGHT stage when compiling your map, which is best added directly before the parameter -meta. The required parameter has already been added by us in all commands in the build menu of the Radiant. If you use Q3Map2Build for compiling, you have to select the parameter additionally. The basic requirement is that the file custinfoparms.txt is located in the scripts directory. This text file is included in the WoP installation in the directory /XTRAS/editing files in the file WoP mapping files.zip and should already have been automatically unpacked into the correct directory when setting up the Radiant.

If you use the Q3A Shader Editor (Q3ASE) to create shader scripts, you should know the following. Unfortunately Q3ASE dies not know how to handle the step sound entries. If a shader is loaded with a new surfaceparm and saved again from Q3ASE, all unknown parameters are simply deleted from the shader script automatically and not saved again. Therefore changes to the shader should always be saved under a new name. You can then manually copy the desired modified parts of the shader into the old shader. This is often easier in terms of effort.