Updated on March 16, 2001 by Thomas McGuire
The most popular online game around at the moment is (semi-ironically) not a game initially aimed at Multiplayer Online gaming. That is Half-Life of course, which has benefited greatly from Valve Softwares continual commitment to updating the game with new code & features. This guide is aimed at (although not limited to) Half-Life, Team Fortress Classic & Counter-Strike.
Where appropriate I'll cover extra information/settings for other Mods. This guide has been prepared on the 22.214.171.124 version of Half-Life/Team Fortress Classic & the 1.1 version of Counter-Strike. From hereon in I'll (mostly) be referring to Half-Life, Team Fortress Classic, Counter-Strike, etc. under the general title of Half-Life, although you should be able to apply all the guidelines here to any other Mods, many of the screenshots used are interchangeable also, e.g. The Counter-Strike Configuration has the same settings available as the Half-Life version. With that out of the way, on with the guide.
Update Half-Life & all installed Mods. The latest version of Half-Life, Version 126.96.36.199, may be Downloaded here for Windows 9x/Me/NT/2000. This latest patch contains a vast amount of bug fixes & optimizations over the initial release version, & of course, improved netcode.
The latest version of Counter-Strike, Version 1.1, may be Downloaded here for Windows 9x/Me/NT/2000 & Linux. Counter-Strike 1.1 even includes Player models with 512x512 textures.
Install DirectX 8.0A on your system if not already installed. This may fix Input/Audio device problems or fix Display issues in Direct 3D.
Drivers. It is essential to get the latest drivers for you Graphics card, Sound card & other relevant hardware. You can find links to many hardware manufacturers on our Drivers page. This can solve Display/Audio/Input problems or performance issues you may have encountered in the game.
If you are using an nVidia chipset based Graphics card & get graphical errors in OpenGL rendering (Not solved by installing an updated Driver) try the following. Open Display Properties & select the OpenGLtab. Set Buffer Flipping Mode to Block Transfer.
If you experience static noise or irregular audio playback, try the following (Assuming installing the latest Soundcard Driver doesnt fix the problems):
Click on Start, Settings, then Control Panel. If you have Windows 2000 or Millennium Edition installed note the icon names as shown in brackets below.
Open the Multimedia (Sounds & Multimedia) icon.
Select the Audio tab & then hit the Advanced Properties (Advanced) button.
Select the Performance tab.
Move the Hardware acceleration slider to the 2nd notch from the left (Basic Acceleration). Move the Sample rate conversion quality slider to the middle notch (Improved sample rate converter).
If you're using Windows 2000 & Half-Life doesn't work after installing the latest Compatibility Update, try installing this file (Unzip the file to the Desktop, Right Click on it & select Install). If you are having other problems running the game (Performance or otherwise) on Windows 2000 then try checking our Windows 2000 Compatibility & Performance guide.
Half-Life can be sensitive to overclocking on some systems, if any components of your system is overclocked & you have problems running Half-Life, e.g. Lockups/Crashes during the game, try restoring the component to its default speed, or add more cooling.
The tweaks here can be either changed in your config.cfg or you may make your own custom Config file for the game. If you want to make you own config file then simply create a New Text Document, enter in the settings & save the file as All files & name it "autoexec.cfg" (The "" will disable saving the file as autoexec.cfg.txt instead). Depending on what config file you are trying to edit, they should be located/saved in the appropriate sub-directory, e.g. Team Fortress Classic config files should be stored in the tfc subdirectory of where Half-Life is installed, e.g. D:\Half-Life\tfc. Counter-Strike files are in the cstrike subdirectory, while Half-Life uses the valve subdirectory, & so on.. If you wish you may name it something other than autoexec, however the autoexec.cfg is automatically loaded upon starting the respective Game-type. If named other than autoexec.cfg you can load other customconfig.cfgs via the console, e.g. exec customconfig.cfg.
NOTE If you choose to make the settings in your own custom config file then you can omit the "" from each setting. In the config.cfg there will need to be a "x". E.g. In your config.cfg a setting would appear as follows, r_texturemode "LINEAR_MIPMAP_LINEAR". while in your own autoexec.cfg it would appear simply as r_texturemode LINEAR_MIPMAP_LINEAR.
You can add commands to your Half-Life shortcut to further tweak the game. To add command line switches take the following steps. Right click on your Half-Life shortcut & select Properties, then Shortcut tab. In the Target field is where these extra settings will be added.
To enter a Commandline switch simply insert them into the Target field, as shown above, after the location of the games exe file. The following general Commandline switches are available;
-32bpp. Enter this to enable a 32-bit colour depth in Half-Life. In order to use this you must - A. Have a Graphics card capable of rendering at this colour depth & B. Add/Edit gl_dither "0" to your config file, as mentioned later on.
-console. This setting will enable the use of the console in Half-Life.
-heapsize x. x sets how much RAM is available to Half-Life. The value for x is in KB's. I'd recommend setting this to 2/3 your physical RAM. Be careful however as if you allocate too much RAM you may crash (Remember Windows & other programs running in the background require RAM too). Leave at least 16MB free. X = RAM to be allocated * 1024.
-nointro. This disables the 2 Intro avi's being played when you load Half-Life. These aren't really necessary to view & it will also speed up the games initial load time.
-noip. This disables the use of UDP, which is part of the TCP/IP protocol. Most Internet servers use UDP, so ignore this Command. This is only really useful if you play the game solely on an IPX/SPX network/server, or don't have TCP/IP installed.
-noipx. This disables the use of the IPX/SPX protocol. You should add this Command if you don't have IPX/SPX installed. Most Internet servers use UDP (part of the TCP/IP protocol).
-numericping. This will allow the dipsplay of numerical ping values in the sever browser rather than the simplified colour code thats used by default.
zonex. This switch allocates x KB's of memory for use with Half-Life's console. This can fix some of the crashes that users experienced by entering long commands/scripts into the console. I'd recommend setting x to 512 (.5MB) 1536 (1.5MB).
Load Half-Life, select Configuration, then Controls, then select the Advanced controls button.
Crosshair. Tick this setting to enable the use of a crosshair in-game. Obviously this will make aiming a lot easier.
Reverse mouse. Tick this to invert the y-axis of the mouse. This means pulling back (towards you) on the mouse will result in looking up & vice versa.
Mouse look. Tick this setting to always use the mouse for aiming/changing view. Id highly recommend this for best control of your view. Although Untick it should you intend to use a joystick/keyboard instead for aiming.
Mouse filter. Tick this setting to enable mouse filtering. This will average out mouse movements resulting in much smoother scrolling. Ubnticking this will disable mouse filtering.
Joystick. Tick this setting if you intend to use a Joystick to play the game, however mouse & keyboard is the best way to play Counter-Strike. It will improve performance slightly if Unticked as well. Useful if you're on a low spec machine.
Joystick look. When Ticked the Joystick will be used for aiming/changing view, rather than movement & vice versa. If you have Joystick Unticked then you can ignore this setting.
Autoaim. When Ticked this can enhance your aim on servers which support this feature. When Unticked aim enhancement will be disabled, even on servers that support it.
Mouse sensitivity. Using this slider you can adjust the responsiveness of your mouse. Moving this to the Right can improve mouse responsiveness, although may make accurate movements awkward due to the extra responsiveness & vice versa.
You can further tweak Input device settings in your Config file. Add/Edit the following lines as you see fit;
m_filter "x". Set x to 1 enables mouse filtering. This averages out mouse movements resulting in much smoother scrolling. A setting of 0 disables mouse filtering. Id high recommend enabling this.
joystick "x". Should you be wanting to use a joystick to play Counter-Strike set this to 1. If you don't, set it to 0. Mouse & keyboard is by far the better way to play however. Performance can improve slightly when Joystick support is disabled.
sensitivity "x". Valid values for x are 0 10. Setting this to Higher values can improve mouse responsiveness, although may make accurate movements awkward due to the extra responsiveness & vice versa. Id recommend leaving this set to the default value unless you find your mouse to be very slow to react to input.
If you are using a mouse (Which most of you will be) you can find out how to further tweak that device in our Mouse Tweak guide.
Load Half-Life, select Configuration, then Video, then select the Video Modes button.
Display Mode. Select your Rendering API here as appropriate Software, OpenGL or Direct3D. For the majority of graphics cards OpenGL will yiel best performance & visual quality. If you have no 3D graphics card installed select Software. You should strongly consider purchasing a new Graphics card if this is the case however.
Selecting a lower Resolution can improve performance & maintain a stable, higher frame rate. Although higher resolutions will look better (sharper & less jagged), they generally run slower. 800 x 600 should be considered the minimum resolution to run Half-Life in nowadays.
OpenGL Driver. If OpenGL is selected as your rendering API then you may select your OpenGL driver here if required. For 3dfx Graphics card owners (Bar Voodoo 1) you should select 3dfx Mini Driver for optimal performance. Owners of other Graphics cards should leave this set to Default.
Click Ok, then hit the Video options button.
Screen size. Use this slider to adjust the size of your game window. Move this slider to the far Right to maximize the view screen, moving it to the Left will reduce the screen size, although on some old systems reducing the screen size a few notches can make the game a lot more playable.
Gamma. This slider may be used to adjust the RGB colour intensity. Move this slider to the Right to increase this level, this can reduce texture detail by brightening up textures, & vice versa.
Glare reduction. This slider controls the amount of glare reduction in Half-Life. Move this slider to the Right to increase the amount of glare reduction & vice versa.
You can further tweak visual settings in your Config file. Add/Edit the following lines as you see fit. NOTE Editing some of these settings may have no effect as Valve have disabled them to counter potential/actual Cheats in the game.
cl_bob "0.xxx". x determines how much you roll back & forth while running. Leave it at the default value or 0 to remove the movement. This & the other 2 settings below may help you aleviate any motion sickness you may experience after prolonged gaming sessions. Aiming may also be improved when the bobbing is disabled.
cl_bobcycle "0.xxx". x determines how much you roll back & forth while moving. Leave it at the default value or 0 to remove the movement.
cl_bobup "0.xxx". x determines how much you bob up while moving. Leave it at the default value or 0 to remove the movement.
cl_himodels "x". Setting x to 1 enables higher quality player models when playing network/internet games. 0 is the default, which uses slightly lower quality player models, although performance is oosted as a result.
cl_showfps "x". Setting x to 1 enables the display of your current frame rate, 0 disables this counter. I'd recommend setting this to 1 if you want to see the "real" effect tweaking display settings has on your frame rate.
gl_alphamin "x". This has to do with surfaces such as fences. If you experience that such surfaces aren't displaying correctly (e.g. Not appearing) try a lower value than the default. Otherwise, leave it at default.
gl_clear "x". A value of 0 for x fills cracks between textures, 1 makes these visible. 0 is slower than 1, although more pleasing visually.
gl_cull "x". Setting x to 1 enables the rendering of visible objects only. 0 renders all regardless which should reduce performance. I'd recommend setting this to 1.
gl_dither "x". A value of 1 for x enables dithering. If you have a card that can render in colour depths greating than 16 bit then try set this to 0.
gl_keeptjunctions "x". Setting x to 1 may fix some visual tearing (fills cracks between textures), although possibly at a slight performance hit. 0 disables this & may run faster, although potentially with visual anomolies (cracks between textures).
gl_lightholes "x". If you've set r_lightmap "0", then also set x to 1, otherwise set it to 0.
gl_max_size "x". x sets the maximum texture size. 256 is the default. Depending on your video you may be able to use larger textures, e.g. Pre-Voodoo 4 users should use 256. Others may be able to set 512 or higher.
gl_overbright "x". A value of 1 for x enables maximum brightness mode. This will yield brighter & more vivid textures being displayed.
gl_palette_tex "x". A value of 1 for x enables paletted textures. Set it to 0 if your videocard doesn't support palettized textures.
gl_picmip "x". A setting of 0 for x gives best image quality. Setting it higher (0 to 4) may improve performance but reduce image quality. Id recommend leaving this at either 0 or 1.
gl_playermip "x". Setting x to 0 gives best texture quality for models. Setting it higher (up to 2) may improve performance but reduce image quality for models. Id recommend leaving this at either 0 or 1.
gl_polyoffset "x". x sets polygon offset factor. Other values may fix flickering with decals or missing decals. NOTE - This will not solve flickering cause by gl_ztrick "1". Leave at the default if none of the glitches mentioned are occuring. 0.1, 1 or 20 reportedly fixes these problems.
gl_round_down "x". I'd recommend leaving this set to 0 or 1.
gl_smoothmodels "x". Set x to 1 to enable Gourad shading of models for better improved visual quality. Setting x to 0 disables this, although performance may improve as a result. I'd recommend leaving it enabled.
gl_spriteblend "x". Leave x set to 1.
gl_texsort "x". A value of 1 for x enables Multi-texturing, which can improve performance on some cards. Setting this to 0 allows you set gl_overbright "1".
gl_texturemode "x". Valid entries for x are GL_NEAREST (worst),
GL_NEAREST_MIPMAP_NEAREST (2nd worst),
Setting it to GL_LINEAR_MIPMAP_LINEAR (Trilnear) will yield best visual quality, but lowest performance. Setting it to the other settings will improve performance, but give increasingly worse image quality. NOTE 3dfx cards cannot perform Trilinear texturing filtering & Multi-texturing at simultaneously.
gl_wateramp "x". A value of 1 enables waves in the water. 0 may improve frame rate in areas with normally wavy water.
gl_ztrick "x". Setting x to 1 may improve performance, although it may cause flickering with distant objects. 0 will eliminate the flickering although can lower performance.
r_decals "x". x sets the maximum amount of decals that can be active in a singleplayer game. Reducing this number may help improve performance, especially in areas where there is a lot of action. 4096 is the default. Once this amount is reached the oldest one(s) is removed & new one(s) placed.
r_displayrefresh "x". With this you can force a specified refresh rate. Replace x with the desired refresh rate you want to use, e.g. 85. Don't set it above your monitor refresh rate though or you may damage your monitor.
r_drawviewmodel "x". A value of 1 for x enables your weapon model to be shown on screen. Setting this to 0 will remove the weapon model from view. This has 2 beneficial effects; A. You gain a few FPS & B. You can see more of the screen (especially with larger weapons). There are 2 disadvantagous side-effects however; A. It looks strange (e.g. Bullet casings are ejected from nowhere) & B. In the heat of battle you may have difficultly knowing weapon you have (e.g. Accidentally using a Rocket Launcher up close). As a result I'd recommend leaving this set to 1.
r_dynamic "x". A value of 1 for x enables dynamic lighting. You shouldn't set this to 0 for any reason. Probably the best example of a dynamic light in the game is your HEV suits Flashlight. As you can guess, playing without the flash light can be very awkward.
r_fullbright "x". Leave this set to 0. Other values, 0 - 4 (Of which 3 & 4 affect software renderer only), will affect visuals adversely.
r_lightmap "x". A value of 0 for x will enable Lightmap lighting (real-time) of levels. Setting x to 1 will enable Vertex lighting instead, which is faster, but uses static lighting of levels.
r_norefresh "x". Not a tweak as such although setting x to 1 will freeze the screen. Leave it set to 0 at all times. This is included here more as a warning than anything else.
r_novis "x". The default value for x is 0. When set to 1 underwater polygons are rendered. Seeing as underwater items generally cannot be seen until you are underwater it is quite futile to enable & will effect performance adversely when near areas with non-transparent water. See r_wateralpha "x" if you decide to set this to 1.
r_mirroralpha "x". A value of 1 enables reflective textures (e.g. The alien warriors armour). 0 disables them, which can improve performance.
r_shadows "x". A value of 1 enables support for shadows, which looks ok, but reduces performance. I'd recommed leaving them disabled, 0.
r_traceglow "x". A value of 1 will make player models non-transparent with regards to light halo's, e.g. If there is a scientist in front of you & a lamp behind him you should not be able to see any light halo from the lamp through his body. While this is graphically realistic, it results in a fairly significant performance hit. 0 is the default & recommended for most users, as from the earlier example, this setting would let the light halo from the lamp be seen through the scientists body.
r_wateralpha "x". If you previously set r_novis "1" you should also set this to 0. This will make all water transparent & as a result you will be able to spot underwater enemies with ease. Leave this set to 1 if you set r_novis "0".
vid_wait "x". x is used to enable/disable Vsync. Vsync effectively limits the frame rate to your current refresh rate at a given resolution. Performance can improve with vsync disabled (Frames are rendered as fast as they can be regardless of refresh rate), although you can experience image tearing &/or controller lag as a result. With vsync enabled you wont experience either image tearing nor controller lag, although frame rate will be limited to your refresh rate. As such Id recommend enabling vsync for best image quality & disabling it when you intend to benchmark Half-Life performance.
violence_ablood "x". A value of 1 for x enables standard blood effects. Setting x to 0 can improve performance.
violence_agibs "x". A value of 1 for x enables standard gibs. Setting x to 0 can improve performance.
violence_hblood "x". A value of 1 for x enables extra blood. Setting x to 0 can improve performance.
violence_hgibs "x". A value of 1 for x enables extra gibs. Setting x to 0 can improve performance.
brightness "x". x controls the brightness (glare) level in the game. Setting x to higher values can increase the brightness level, which can make textures look more washed out, & vice versa. Adjust this setting to suit your own needs. The default setting is 1, although there are other settings related to this which need to be edited too. These other 3 settings are listed below.
gamma "x". x can be used to adjust the RGB colour intensity. Higher values can reduce texture detail by brightening up textures, & vice versa.
lightgamma "x". x sets the lighting gamma value. Higher values can increase lighting brighness levels, & vice versa.
texgamma "x". x sets the texture gamma level. I'd recommend leaving this setting at the default also.
Certain weapons in Half-Life can fire Tracers, these display the path/trail a bullet takes & where/what it hits. The 4 settings beneath can be used to change a tracers colour & other effects.
traceralpha "x". x sets the transparency level of Tracer ammo. Valid values for x are 0 1. The higher this value is the less transparent Tracer ammo is, & vice versa. Setting this to 1 will disable the transparency effect, while 0 will make it completely transparent (defeating the purpose of the Tracer).
tracerred "x". x controls the intensity of the colour Red in Tracer ammo. Raise this value a slider to increase the intensity of the Red element of Tracer ammo, & vice versa.
tracergreen "x". x controls the intensity of the colour Green in Tracer ammo. Raise this value a slider to increase the intensity of the Green element of Tracer ammo, & vice versa.
tracerblue "x". x controls the intensity of the colour Blue in Tracer ammo. Raise this value a slider to increase the intensity of the Blue element of Tracer ammo, & vice versa.
lambert "x". This setting controls model lighting. I'd highly recommended you leave this setting at the default value.
precache "x". When x is set to 1 this enables the precaching of textures in Video memory before loading a level. This can improve performance on many graphics cards (In the sense that Textures aren't loaded during a level if the Graphics card has sufficient texture memory), although it will also increase loading time. When x is set to 0 textures are loaded during levels instead, which will improve level loading time, although can adversely effect performance in levels as textures are loaded into Video memory.
tripplebuffer "x". Triple buffering allocates a 3rd frame buffer. This frame buffer can improve performance by allowing the hardware to render at the same time that the 3D application performs other tasks. Set x to 1 to enable Tripple buffering for improved performance. However, Tripple buffering requires extra video memory, so on older Graphics cards (Low Video memory) you can improve performance by setting this to 0 instead.
Make sure to take a look at the TNT/GeForce, Voodoo3 or Voodoo4/5 Tweak guides for information on how to optimize the performance/visual quality of those cards in Half-Life. These can help you improve image quality/performance even further than in-game & config tweaks can.
Load Half-Life, select Configuration, then the Audio button.
Game sound volume. Move this slider to the Right to increase in-game volume, & vice versa.
HEV suit volume. Move this slider to the Right to increase the HEV suits volume, & vice versa.
Play CD music. Untick this setting to disable CD audio in Half-Life. This can both improve performance, & make it easier to hear others in the game.
High quality sound. Tick this setting to enable high quality (22Khz) sounds being played. Untick it for improved performance by using lower quality sounds (11Khz). You should consider this if you have a very old soundcard (ISA).
Enable A3D hardware support. Tick this setting to enable A3D support on supported Soundcards. This will allow for enhanced audio effects such as reverberation, for improved audio quality (More realistic), although performance may be reduced as a result. Untick this to disable A3D support.
Enable EAX hardware support. Tick this setting to enable EAX support on supported Soundcards. This will allow for enhanced audio effects such as reverberation & occlusion, for improved audio quality (More realistic), although performance may be reduced as a result. Untick this to disable EAX support.
You can further tweak audio settings in you Config file. NOTE Some of these settings are API specific, e.g. Many of these settings are only relevant when using A3D sound. Add/Edit the following lines as you see fit;
s_2dvolume "x". x sets the maximum volume which 2D sounds are played at. By the nature of the filters being applied to the A3D buffers, they are quieter then their 2D counterparts. Hence it is important to quiet the 2D sounds to make up for this.
s_a3d "x". A value of 1 for x enables A3D on supported Soundcards. This will allow for enhanced audio effects such as reverberation, for improved audio quality (More realistic), although performance may be reduced as a result. A value of 0 disable A3D support.
s_bloat "x". x controls the Bloat factor for polygons. Effectively this scales each polygon by a certain amount. This is a rough way to fill holes left by unrendered small polygons.
s_buffersize "x". x sets the audio buffer size. I'd recommend leaving it at the default value.
s_doppler "x". x can be used to adjust the doppler effect. Valid values are from 0 10. This is a very sensitive setting. I'd recommend leaving it at the default.
s_eax "x". A value of 1 for x enables EAX on supported Soundcards. This will allow for enhanced audio effects such as reverberation, for improved audio quality (More realistic), although performance may be reduced as a result. A value of 0 disable EAX support.
s_geometry "x". A value of 1 enables A3D geometry processing, 0 disables it. If you enable this feature then you can also edit the setting below. Enabled is slower however.
s_geom_reverb "x". A value of 1 enables geometric reverb (Which sounds more realistic), 0 disables it, which will improve performance.
s_numpolys "x". x sets the maximum number of polygons to be rendered in A3D. Setting this to 0 is equivalent to s_geometry "0". Valid values are 0 & above. I'd recommend leaving it at the default value, although setting it higher may result in more accurate 3d sound.
s_occfactor "0.xx". x sets the transmission value of material - the smaller the number, the more occluded the sound is (less sound passes through the material) & vice versa. Valid values are 0 - 1.
s_occlude "x". A value of 1 for x enables occulsion effects (Sound passing through materials gets muffled by them), 0 disables this for improved performance.
s_refdelay "4". x sets the delay between a source & its closest reflection. The higher the delay (x), the longer it takes between when the source & its first reflection is played, valid values are 0 - 100. I'd recommend leaving it at the default value.
s_reverb "x". Set x to 1 to enable reverberation effects. This can improve audio quality (more realistic), although performance will be lower. 0 disables reverb, & performance can be improved as a result.
s_reflect "x". Set x to 1 to enable audio reflections. This can improve audio quality (more realistic), although performance will be lower. 0 disables reflections & performance will be improved as a result.
s_verbwet "0.xx". x sets the wet/dry mix for reverb in A3D. The higher x is, the wetter the sounds. Valid values are 0 to 1. I'd recommend leaving this at the default.
bgmvolume "x". Setting x to 0 disables CD audio, 1 enables CD audio playback. I'd highly recommend leaving CD audio disabled.
bgmbuffer "x". x sets the CD audio buffer size. Try modifying the value if you experience CD audio playback problems.
ambient_fade "x". x sets the distance at which ambient sounds fade out, with 100 being the maximum distance. Using lower values may improve performance slightly.
ambient_level "x". x sets the audio level for ambient sounds in the game. This value represents a fraction of volume setting, e.g. if ambient_level is set to 0.33 & volume is set to 0.90 then the ambient sounds are effectively played at 0.3. Valid entries for x from 0.00 1.00.
hisound "x". Set x to 1 for best sound quality (22Khz). Set it to 0 for better performance (11Khz), you should only change it to 0 if you have an old soundcard (ISA) as audio quality will be reduced.
loadas8bit "x". Set x to 0 for improved audio quality (16-bit). A setting of 1 may improve performance a little but reduce audio quality (8-bit).
nosound "x". Setting x to 1 disables all audio. You might want to do this when benchmarking so as only your video card will be taken into account for performance. I'd recommend leaving it at 0.
suitvolume "x". x sets the HEV suit volume level. Valid values for x are 0 1. Use High values to increase in-game volume, & vice versa. 1 is the maximum, 0 will mute the HEV Suit.
volume "x". x sets the games volume level. Valid values for x are 0 1. Use High values to increase in-game volume, & vice versa. 1 is the maximum, 0 will mute the game.
_snd_mixahead "0.xx". x sets the sound mixahead value. Increasing/Decreasing this value may fix sound stuttering with some soundcards. I'd recommend setting it to 0.14.
You can find out how to further improve your audio experience in Half-Life by taking a look at our Soundcard/speakers Tweak guide, which will show you how to setup your Soundcard/Speakers properly.
With the latest Half-Life patches came new netcode, which removes visible signs of lag (i.e. There is no more need for frame rate caps). However, this in no way means that there's no more need to tweak your netplay settings. Counter-Strike & other mods have also been updated to take advantage of Half-Life's new netcode. Add/Edit the following lines to your config file as necessary. Begin by enabling the Netgraph, this will show information on your connection & allow you to fine tune the connection variables for a better online game.
net_graph "x". For x there are 3 different types of Netgraph you can use. A value of 1 enables the standard netgraph. 2 enables a more detailed netgraph, while a setting of 3 displays a cut-down netgraph. I'd recommend setting this to either 2 or 3. You should note that using net_graph "3" will have no adverse effect on frame rate (1 or 2 can).
Open your config.cfg file search for rate xxxx. The default value for this may not be correct for you. Depending on your connection, try changing the value depending on your connection. You can also change this variable during gameplay to suit your needs. If your ping is high you may want to lower your rate. Try adding/editing the following to your config file.
bind "x" "rate xxxx"
bind "y" "rate xxxx"
You can substitute in your own keys & rate values, I use 2600 & 3000. Set one low in case your ping starts to rise, this is a sign you may have set it to high for the current server, try increasing it for better results whenever possible. You can vary the values, depending on your connection.
The red progress bar on the left hand side indicates a download in progress. On the right hand side you can see your current frame rate, ping & other info. When your ping is high/climbing try lowering your rate setting, & whenever possible try increasing your rate setting so you can receive more data.
Reading the netgraph
The following information was sent to me by Yahn Bernier of Valve Software regarding the new netcode. Some of this has been modified for readibility of course. NOTE If you use net_graph "1" an extra graph will be displayed above the Framerate/Latency counters. This displays different types of data which you are receiving & isn't really.
1: This area shows numeric information about the performance of your computer & its net connection. The numbers registered are as follows (based on the above snapshot). As shown, the client is rendering frames at 41.2 frames per second. The client believes that it has a 332 millisecond round trip message time to the server (this is a latency reading, rather than a pure ping, since it includes processing overhead on both ends). The last packet the client received ("in") from the server was 32 bytes long. The average data rate over the last second or so from the server has been 1.05 kilobytes/second & the last packet had 3 bytes of "player" data in it. On the other hand, the last command issued by the client was only 29 bytes long & the client is generating 1.31 kilobytes/second of upstream data right now.
2: Below the numeric readout is the well-understood green/red/yellow/blue readout that most users are familiar with. In particular, the height of the green line indicates how much latency exists in the connection for the specific packet received. The green lines max out at around 1000ms of latency, so our player here with 332 ms of latency has a green line that goes about 1/3 of the way up the area. The red vertical lines you see indicate dropped packets. In addition, if the client & server encounter severe connection problems, they can become so out of date that you will see blue lines similar to the red ones. Finally, if the bandwidth choke is active (your rate setting is holding back packets at the server because your connection can't handle them), then the green dot for the next packet you receive will be drawn in yellow instead.
3: Area 4 is correlated to how quickly the client is rendering frames. For each frame rendered, the graph indicates how much interpolation was used in drawing objects in the world. If you are not getting a sufficient number of server updates (Less than 10/second) or you drop enough packets, then the client won't be able to interpolate any more & will have to extrapolate instead. In that case, you'll see the lower part of the graph go above the grayish line (above the dark blue area) & turn yellow to orange/red depending upon how far out of date your data becomes.
4: The number here is the number of updates per second you are currently requesting from the server. The default is to receive 20 updates/second from the server. You can change this value by setting the cl_updaterate "x" cvar from the console.
5: This number is the maximum number of command packets you will send to the server per second. By default you send up to 30 command packets per second up to the server. If you are running faster than 30 frames per second, then multiple commands will be put into some packets. You can change the rate of sending command packets to the server by setting the cl_cmdrate "x" cvar. In addition, with each command, we re-send the last few previous movement commands (in case there is packet loss) so that we can keep moving smoothly in the face of minor network problems. The default number of "backup" commands that we send is 2, but you can change this number by setting cl_cmdbackup "x" to another number. You can send more than 8 backup commands & you should note that sending backup commands will increase your outgoing bandwidth usage.
6: The final area is the light blue & (sometimes) red line at the very bottom of the netgraph. This line is based on your framerate & your cl_cmdrate "x" setting. For every frame where a command packet is actually send out onto the wire, a light blue dot is placed on the graph. If commands are accumulated for deferred sending, you'll see a red dot instead. Try setting cl_cmdrate "x" to half your framerate to see the effect.
The following settings below may help your further customize/improve your netplay.
net_graphwidth "x". x sets the width (In pixels) of the Netgraph. The default width is 192. Increase/Decrease ythis as you feel necessary.
net_graphheight "x". x sets the height (In pixels) of the Netgraph. The default height is 64. Increase/Decrease ythis as you feel necessary.
net_graphpos "x". x sets the position of the Netgraph, where valid values for x are 1 (Bottom Right), 2 (Bottom Middle) & 3 (Bottom Left).
cl_allowdownload "x". A value of 1 for x enables downloading of maps/models/decals when joining a server. 0 disables this. I'd recommend leaving it enabled.
cl_allowupload "x". A value of 1 for x enables the uploading of Maps/Models/Decals when joining a server. 0 disables this. I'd recommend leaving it enabled.
cl_download_ingame "x". A value of 1 for x enables downloading during a multiplayer game. This obviously can have an adverse effect on your netplay, for this reason I'd recommend leaving this set to 0. You can always have cl_allowdownload "1" which allows downloading in between games.
cl_gaitestimation "x". Setting x to 1 enables estimated player movement motions, 0 disables this.
cl_nodelta "x". A value of 0 for x disables delta compression. You shouldn't do this for any reason. Leave it at 0.
cl_nopred "x". Setting this to 1 disables client side prediction, 0 enables the prediction. It is strongly recommended you leave prediction enabled.
cl_resend "x". This sets how many times a packet may be resent if it fails. I'd recommend setting x to 1 or 2.
cl_showmessages "x". A value of 1 for x enables the display of messages in multiplayer games, 0 will disable this. It's probably best to leave this set to 1, although a bit of user discretion comes into this.
cl_cmdrate "x". This sets the maximum amount of packets that get sent to the server per second. The default setting is 30. Those on ISDN or faster connections should try setting this higher. You may need to experiment with it this setting to find the optimal value for you (Try using lower values if you have a slow upload speed), as you may notice via the Netgraph your upload rate is generally more stable than your download rate.
cl_updaterate "x". This sets the maximum amount of packets that get sent from the server per second. The default setting is 20. Those on ISDN or faster connections should try this higher (35+). You may need to experiment with it this setting to find the optimal value for you.
mp_decals "x". This sets the amount of decals that can be active in a multiplayer game. Reducing this number may help improve performance, especially in areas where there is a lot of action. 300 is the default. Once the amount is reached the oldest decal(s) is removed & new one(s) placed.
mp_footsteps "x". Set this to 1 to enable footsteps during a multiplayer game. This can be useful in locating (hearing) the enemy before you see them. 0 disables this & may improve netplay slightly. I'd recommend leaving this enabled.
pushlatency "x". It is recommended that you set x to half your normal ping. & make the value negative, e.g. If your ping to a server is normally about 300, then you'd set x to -150.
The following settings relate to mods that use client side weapons (such as Team Fortress).
cl_lw "x". When x is set to 1 weapon firing animations, sounds, etc. are played client-side at the time the weapon is fired. When set to 0 these events are delayed until the server conveys the event data back to the client. Should you set cl_lc "0" then you should also set this to 0 & if cl_lc "1" then you should also set this to 1.
cl_lc "x". When x is set to 1 this sets that you are requesting the server you are connected to performs server-side lag compensation. On fast Internet connections (Cable/DSL) lag compensation can adversely effect multiplayer performance, if this is the case for you set x to 0. If cl_lw "0", then cl_lc "x" is ignored. It is important to note that this is not a client-side check & transmission to the server, instead, everything is computed server-side.
cl_lb "x". When x is set to 1 client-side weapons will predict their own blood trails when other players are hit. When set to 0 the server does this, which is more accurate at determining hit locations. If cl_lc "0" this setting is ignored. I'd recommend setting this to 0, particularly with inaccurate weapons.
You should also take a look at the Modem tweaking guides for Windows 9x, Windows Millennium Edition & Windows 2000 (as appropriate) for how to optimize your Internet connection & reduce ping times further in online games. If you play on a LAN then check out the LAN Tweak guide.
This section deals with settings/commands only available in Counter-Strike. These deal with settings related to Clients only.
ah "x". When x is set to 1 this enables the Auto-Help feature in-game. When set to 0 this feature is disabled. More experienced players would be best off disabling this feature, although it may be of some benefit to new players.
mp_playerid "x". x controls the information displayed in the Status bar. When set to 0 all Player names are listed, in appropriate team colours. When set to 1 only Hostage & Team-mates names are displayed. When set to 2 no Player/Hostage names are displayed.
fastsprites "x". x controls the complexity level of smoke in the game. Valid values for x are 0 2, with 0 being the most realistic & 2 being least realistic appearing. Setting it to higher values can improve performance, particularly in areas with lots of smoke weapons in use.
max_shells "x". x sets the maximum amount of shells which may be rendered. By using a low number (100 or less) you can improve performance in certain situations, e.g. Fights with rapid fire weapons. Using a higher number (150 or more) will appear more realistic (battles with tend to leave a lot of gun casings on the terrain), although can lower performance. Valid numbers for x are 0 500.
max_smokepuffs "x". x sets the maximum amount of smoke puffs which may be rendered. By using a low number you can improve performance (& visibility) in certain situations, e.g. Fights with gas grenades in use. Using a higher number will appear more realistic, although can lower performance. Valid numbers for x are 0 500.
In a Bind
Excuse the poor joke. One of them more important aspects of games like Counter-Strike is Scripts. Scripts is the name given to a combination of Aliases & Binds. Using these you can set a single key to launch a complex or lengthy series of commands. You don't necessarily need to use Aliases, but more experienced players will generally have a couple of these up their virtual sleeves to make life a whole lot easier for them.
This section should be considered something of an Introduction to Scripts & such. To get you into the mood for Scripting I'll take you through the process of creating a Basic & Advanced Script.
Creating a Basic Script
You should add any Scripts you create into the customconfig.cfg file which you launch with the Game type in question (Be it Half-Life, Counter-Strike or whatever). The config.cfg file doesn't count for this purpose however. Aliases take the following basic form;
alias name "command"
bind key "aliasname"
name refers to the name you wish to call your Alias, set this as you see fit, for convenience sake, make it short. command refers to the command which you wish the alias to use. key refers to the Bindable key which you wish to use to execute your alias. aliasname must be set to the name of the Alias. For example, here's a simple Alias to say a phrase to annoy everyone on a server.
alias annoy "say All your base are belong to us"
bind F1 "annoy"
When the F1 key is press you will immediately say "All your base are belong to us" to everyone on the server. As you can no doubt see, this is much easier than hitting the console key, then entering in all of that command.
Creating Advanced Scripts
Once you have mastered Basic scripts you should try out more Advanced ones. Here is an example of a more complex script;
alias name1 "command1; command2"
alias name2 "command3; command4"
bind key "name1; name2"
As you can see, Advanced scripts take the same form as the Basic Scripts, albeit it with more commands & Aliases in use. ; (Followed by a space) indicates you wish to initiate another command after the current one. As before enter the appropriate commands, names & key. What you may have noticed now is that your can bind a single key to multiple Aliases. For example, here's an Advanced Script to buy an MP5 sub-machine gun, ammunition for it & then radio your Team-mates for backup.
alias getmp5 "buy; menuselect 3; menuselect 1; buyammo1"
alias backup "getmp5; radio3; menuselect3"
bind F2 "getmp5; backup"
Hopefully this short Introduction has given you a taste of what scripting can do for you. If you wish to find out more information on Scripting then I suggest you head on over to Counter-Script & Z-Malloc Overflow.
Your Half-Life gaming experience should now be greatly improved with better visuals, audio & hopefully minimal performance loss & perhaps even improved network/internet performance. This guide may be updated when/if further patches become available. Email me if you have any Questions/Comments/Suggestions about this guide.