# SDK Known Issues List Fixed

This page is intended to store important SDK bugs/known issues that existed in previous released but have now been fixed. If your mod is based on an older SDK release, you may still be experiencing some of these bugs.

This Diff And Patch file will update from the 2006-01-12 SDK to the 2006-08-04 SDK: http://tinyurl.com/mjht6

For those of you using CVS, you might also want to:

`cvs rm cl_dll/vgui_measuretimepanel.cpp cl_dll/game_controls/vgui_TeamFortressViewport.cpp cl_dll/hl2_hud/c_assassin_smoke.cpp cl_dll/hl2_hud/c_combineguard.cpp dlls/hl2_dll/grenade_hopwire.cpp dlls/hl2_dll/grenade_hopwire.h dlls/hl2_dll/weapon_hopwire.cpp materialsystem/stdshaders/basevsshader_vertexlitgeneric_dx9_helper.cpp public/cache_user.h public/imageloader.h public/smooth_average.cpp public/tgaloader.cpp public/tgaloader.h public/tgawriter.h public/engine/IVEngineCache.h public/tier1/resourcemanager.h tier1/resourcemanager.cpp utils/glview/glview.dsw utils/smdlexp/smdlexp.dsw utils/vbsp/disp_lightmap_alpha.cpp utils/vbsp/disp_lightmap_alpha.h`

...and...

```cvs add -ko cl_dll/AnimateSpecificTextureProxy.cpp cl_dll/ScreenSpaceEffects.cpp cl_dll/ScreenSpaceEffects.h cl_dll/baseclientrendertargets.cpp cl_dll/baseclientrendertargets.h cl_dll/c_colorcorrection.cpp cl_dll/c_colorcorrectionvolume.cpp cl_dll/c_env_projectedtexture.cpp cl_dll/c_env_tonemap_controller.cpp cl_dll/c_forcefeedback.cpp cl_dll/c_point_commentary_node.cpp cl_dll/c_rumble.cpp cl_dll/c_rumble.h cl_dll/c_sceneentity.cpp cl_dll/c_vehicle_choreo_generic.cpp cl_dll/client_factorylist.cpp cl_dll/client_factorylist.h cl_dll/client_xbox.vcproj cl_dll/entity_client_tools.cpp cl_dll/entityoriginmaterialproxy.cpp cl_dll/episodic cl_dll/fx_interpvalue.cpp cl_dll/fx_interpvalue.h cl_dll/in_forcefeedback.cpp cl_dll/mp3player.cpp cl_dll/mp3player.h cl_dll/playerenumerator.h cl_dll/toolframework_client.cpp cl_dll/toolframework_client.h cl_dll/viewangleanim.cpp cl_dll/viewangleanim.h cl_dll/hl2_hud/c_prop_combine_ball.h cl_dll/hl2_hud/hud_autoaim.cpp cl_dll/hl2_hud/hud_hdrdemo.cpp common/xbox dlls/CommentarySystem.cpp dlls/ai_behavior_passenger.cpp dlls/ai_behavior_passenger.h dlls/ai_eventresponse.cpp dlls/ai_eventresponse.h dlls/colorcorrection.cpp dlls/colorcorrectionvolume.cpp dlls/consta.h dlls/entity_tools_server.cpp dlls/env_debughistory.cpp dlls/env_debughistory.h dlls/env_projectedtexture.cpp dlls/env_tonemap_controller.cpp dlls/episodic dlls/forcefeedback.cpp dlls/logic_mirror_movement.cpp dlls/physics_collisionevent.h dlls/toolframework_server.cpp dlls/vehicle_choreo_generic.cpp dlls/vgui_gamedll_int.cpp dlls/vgui_gamedll_int.h dlls/weight_button.cpp dlls/hl2_dll/ai_behavior_operator.cpp dlls/hl2_dll/ai_behavior_operator.h dlls/hl2_dll/env_speaker.h dlls/hl2_dll/info_darknessmode_lightsource.cpp dlls/hl2_dll/info_darknessmode_lightsource.h dlls/hl2_dll/npc_alyx_episodic.cpp dlls/hl2_dll/npc_alyx_episodic.h dlls/hl2_dll/npc_combine_episodic.cpp dlls/hl2_dll/npc_combine_episodic.h dlls/hl2_dll/npc_turret_floor.h dlls/hl2_dll/npc_turret_ground.h dlls/hl2_dll/vehicle_jeep.h dlls/hl2_dll/weapon_citizenpackage.h dlls/hl2mp_dll/hl2mp_gameinterface.h game_shared/ModelSoundsCache.cpp game_shared/ModelSoundsCache.h game_shared/SceneCache.cpp game_shared/SceneCache.h game_shared/choreoscene.cpp.rej.1 game_shared/forcefeedback.h game_shared/gamestats game_shared/rumble_shared.h game_shared/sceneentity_shared.cpp game_shared/sceneentity_shared.h game_shared/sequence_Transitioner.cpp game_shared/sequence_Transitioner.h game_shared/vehicle_choreo_generic_shared.h game_shared/hl2/survival_gamerules.cpp linux_sdk/files.vdf public/BitmapFontFile.h public/avi public/bitmap public/captioncompiler.h public/cdll_intv11.h public/cdll_intv12.h public/datacache public/dmserializers public/eifaceV21.h public/icvarV02.h public/ifilesystemV12.h public/inputsystem public/interpolatortypes.cpp public/interpolatortypes.h public/isqlwrapper.h public/istudiorenderV21.h public/jcalg1.h public/kevvaluescompiler.cpp public/keyvaluescompiler.h public/loadcmdline.cpp public/loadcmdline.h public/lumpfiles.cpp public/lumpfiles.h public/mathlib public/p4lib public/polyhedron.cpp public/polyhedron.h public/raytrace.h public/renderparm.h public/resourcetags.cpp public/resourcetags.h public/scenefilecache public/soundsystem public/studio_virtualmodel.cpp public/tier2 public/tier3 public/toolframework public/tools public/vphysics_interfaceV30.h public/xwvfile.h public/xzp.cpp public/xzp.h public/SoundEmitterSystem/isoundemittersystembasev1.h public/VGuiMatSurface/IMatSystemSurfaceV3.h public/VGuiMatSurface/IMatSystemSurfaceV4.h public/appframework/IAppSystemGroup.h public/appframework/VguiMatSysApp.h public/cl_dll/iclientrendertargets.h public/engine/SndInfo.h public/engine/ivrenderviewv11.h public/engine/view_sharedv1.h public/materialsystem/IColorCorrection.h public/materialsystem/IShaderV2.h public/materialsystem/hardwareverts.h public/materialsystem/imorph.h public/materialsystem/ivertextexture.h public/materialsystem/meshreader.h public/steam/isteambilling.h public/steam/isteamfriends.h public/steam/isteamgameserver.h public/steam/isteamutils.h public/steam/steam_api.h public/steam/steam_gameserver.h public/tier0/afxmem_override.cpp public/tier0/icommandline.h public/tier0/testthread.h public/tier0/threadtools.h public/tier0/tslist.h public/tier0/xbox_codeline_defines.h public/tier1/byteswap.h public/tier1/datamanager.h public/tier1/diff.h public/tier1/generichash.h public/tier1/jobthread.h public/tier1/refcount.h public/tier1/strtools.h public/tier1/tier1.h public/tier1/utlflags.h public/tier1/utlhandletable.h public/tier1/utlntree.h public/tier1/utlstring.h public/vgui/ISurfaceV28.h public/vgui/ISurfaceV29.h public/vgui/IVGuiV06.h public/vgui/IVguiMatInfo.h public/vgui/IVguiMatInfoVar.h public/vgui_controls/ExpandButton.h public/vgui_controls/InputDialog.h public/vgui_controls/KeyBindingHelpDialog.h public/vgui_controls/KeyBindingMap.h public/vgui_controls/KeyBoardEditorDialog.h public/vgui_controls/MessageMap.h public/vgui_controls/Splitter.h public/vgui_controls/ToolWindow.h public/vgui_controls/pch_vgui_controls.h public/vgui_controls/vgui_controls.cpp public/vphysics/virtualmesh.h public/vstdlib/pch_vstdlib.h public/vtf/swizzler.h tier1/byteswap.cpp tier1/datamanager.cpp tier1/diff.cpp tier1/generichash.cpp tier1/jobthread.cpp tier1/strtools.cpp tier1/tier1.cpp tier1/tier1.vcproj tier1/tier1_xbox.vcproj tier1/undiff.cpp tier1/utlstring.cpp tier1/xboxstubs.cpp utils/common/tools_minidump.cpp utils/common/tools_minidump.h utils/vbsp/materialsub.cpp utils/vbsp/materialsub.h utils/vrad/imagepacker.cpp utils/vrad/imagepacker.h vgui2/controls/BuildFactoryHelper.cpp vgui2/controls/ExpandButton.cpp vgui2/controls/InputDialog.cpp vgui2/controls/KeyBindingHelpDialog.cpp vgui2/controls/KeyBoardEditorDialog.cpp vgui2/controls/Splitter.cpp vgui2/controls/ToolWindow.cpp vgui2/controls/vgui_controls_xbox.vcproj cl_dll/episodic/c_prop_coreball.cpp cl_dll/episodic/c_weapon_hopwire.cpp cl_dll/episodic/episodic_screenspaceeffects.cpp cl_dll/episodic/episodic_screenspaceeffects.h common/xbox/xboxstubs.h dlls/episodic/ai_behavior_passenger_companion.cpp dlls/episodic/ai_behavior_passenger_companion.h dlls/episodic/ai_behavior_passenger_zombie.cpp dlls/episodic/ai_behavior_passenger_zombie.h dlls/episodic/grenade_hopwire.cpp dlls/episodic/grenade_hopwire.h dlls/episodic/prop_coreball.cpp dlls/episodic/prop_stickybomb.cpp dlls/episodic/vehicle_jeep_episodic.cpp dlls/episodic/vehicle_jeep_episodic.h dlls/episodic/weapon_hopwire.cpp dlls/episodic/weapon_oldmanharpoon.cpp game_shared/gamestats/ep1_gamestats.cpp game_shared/gamestats/ep1_gamestats.h public/avi/iavi.h public/bitmap/bitmap.h public/bitmap/float_bm.h public/bitmap/imageformat.h public/bitmap/psd.h public/bitmap/tgaloader.h public/bitmap/tgawriter.h public/datacache/idatacache.h public/datacache/idatacacheV1.h public/datacache/imdlcache.h public/dmserializers/idmserializers.h public/inputsystem/AnalogCode.h public/inputsystem/ButtonCode.h public/inputsystem/InputEnums.h public/inputsystem/iinputsystem.h public/mathlib/halton.h public/mathlib/lightdesc.h public/mathlib/math_base.h public/mathlib/ssemath.h public/p4lib/ip4.h public/scenefilecache/ISceneFileCache.h public/soundsystem/isoundsystem.h public/soundsystem/snd_audio_source.h public/soundsystem/snd_device.h public/tier2/tier2.h public/tier2/utlstreambuffer.h public/tier2/vconfig.h public/tier3/tier3.h public/toolframework/iclientenginetools.h public/toolframework/ienginetool.h public/toolframework/iserverenginetools.h public/toolframework/itooldictionary.h public/toolframework/itoolentity.h public/toolframework/itoolframework.h public/toolframework/itoolsystem.h public/toolframework/toolframework.cpp public/tools/bonelist.cpp public/tools/bonelist.h dlls/episodic/ai_behavior_passenger_companion.cpp dlls/episodic/ai_behavior_passenger_companion.h dlls/episodic/ai_behavior_passenger_zombie.cpp dlls/episodic/ai_behavior_passenger_zombie.h dlls/episodic/grenade_hopwire.cpp dlls/episodic/grenade_hopwire.h dlls/episodic/prop_coreball.cpp dlls/episodic/prop_stickybomb.cpp dlls/episodic/vehicle_jeep_episodic.cpp dlls/episodic/vehicle_jeep_episodic.h dlls/episodic/weapon_hopwire.cpp dlls/episodic/weapon_oldmanharpoon.cpp public/avi/iavi.h public/bitmap/bitmap.h public/bitmap/float_bm.h public/bitmap/imageformat.h public/bitmap/psd.h public/bitmap/tgaloader.h public/bitmap/tgawriter.h public/datacache/idatacache.h public/datacache/idatacacheV1.h public/datacache/imdlcache.h public/dmserializers/idmserializers.h public/inputsystem/AnalogCode.h public/inputsystem/ButtonCode.h public/inputsystem/InputEnums.h public/inputsystem/iinputsystem.h public/mathlib/halton.h public/mathlib/lightdesc.h public/mathlib/math_base.h public/mathlib/ssemath.h public/p4lib/ip4.h public/scenefilecache/ISceneFileCache.h public/soundsystem/isoundsystem.h public/soundsystem/snd_audio_source.h public/soundsystem/snd_device.h public/tier2/tier2.h public/tier2/utlstreambuffer.h public/tier2/vconfig.h public/tier3/tier3.h public/toolframework/iclientenginetools.h public/toolframework/ienginetool.h public/toolframework/iserverenginetools.h public/toolframework/itooldictionary.h public/toolframework/itoolentity.h public/toolframework/itoolframework.h public/toolframework/itoolsystem.h public/toolframework/toolframework.cpp public/tools/bonelist.cpp public/tools/bonelist.h cl_dll/episodic/c_prop_coreball.cpp cl_dll/episodic/c_weapon_hopwire.cpp cl_dll/episodic/episodic_screenspaceeffects.cpp cl_dll/episodic/episodic_screenspaceeffects.h cl_dll/game_controls/baseviewport.cpp common/xbox/xboxstubs.h game_shared/gamestats/ep1_gamestats.cpp game_shared/gamestats/ep1_gamestats.h ```

This Diff And Patch will update from the 2006-08-04 SDK to the 2006-08-11 SDK:

```--- src/linux_sdk/Makefile	2006-08-05 10:59:16.560125000 -0500
+++ src/linux_sdk/Makefile	2006-08-19 13:54:31.659375000 -0500
@@ -54,7 +54,7 @@

# the CPU target for the build, must be i486 for now
ARCH=i486
-ARCH_CFLAGS=-mtune=i686 -march=pentium -mmmx -O3
+ARCH_CFLAGS=-mtune=i686 -march=pentium3 -mmmx -O3

# -fpermissive is so gcc 3.4.x doesn't complain about some template stuff
BASE_CFLAGS=-fpermissive -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp

--- src/linux_sdk/Makefile.vcpm	2006-08-05 10:59:16.575750000 -0500
+++ src/linux_sdk/Makefile.vcpm	2006-08-19 13:54:31.862500000 -0500
@@ -33,7 +33,9 @@
TIER1_OBJS = \
\$(TIER1_OBJ_DIR)/characterset.o \
\$(TIER1_OBJ_DIR)/interface.o \
+	\$(TIER1_OBJ_DIR)/generichash.o \
\$(TIER1_OBJ_DIR)/KeyValues.o \
+	\$(TIER1_OBJ_DIR)/stringpool.o \
\$(TIER1_OBJ_DIR)/utlbuffer.o \
\$(TIER1_OBJ_DIR)/utlsymbol.o \
```

## Jerky Movement when player is on moving lift/elevator

Note:This issue was fixed in the 2006-08-04 SDK Update

"I'm not sure if it's the issue or not, but I remember a bug like this in episode 1," said Jay on HL Coders "If it's the same issue, then setting smoothstairs to zero will fix it (but cause other problems). If that's the case then you need to add some logic to disable stair smoothing when the player is on an elevator."

Here's the code from ep1

baseplayer_shared.cpp:

```static ConVar smoothstairs( "smoothstairs", "1", FCVAR_REPLICATED, "Smooth player eye z coordinate when traversing stairs." );

//-----------------------------------------------------------------------------
// Handle view smoothing when going up or down stairs
//-----------------------------------------------------------------------------
void CBasePlayer::SmoothViewOnStairs( Vector& eyeOrigin )
{
CBaseEntity *pGroundEntity = GetGroundEntity();
float flCurrentPlayerZ = GetLocalOrigin().z;
float flCurrentPlayerViewOffsetZ = GetViewOffset().z;

// Smooth out stair step ups
// NOTE: Don't want to do this when the ground entity is movingthe player
if ( ( pGroundEntity != NULL && pGroundEntity->GetMoveType() ==
MOVETYPE_NONE ) && ( flCurrentPlayerZ != m_flOldPlayerZ ) &&
smoothstairs.GetBool() &&
m_flOldPlayerViewOffsetZ == flCurrentPlayerViewOffsetZ
)
{
int dir = ( flCurrentPlayerZ > m_flOldPlayerZ ) ? 1 :-1;

float steptime = gpGlobals->frametime;
if (steptime < 0)
{
steptime = 0;
}

m_flOldPlayerZ += steptime * 150 * dir;

const float stepSize = 18.0f;

if ( dir > 0 )
{
if (m_flOldPlayerZ > flCurrentPlayerZ)
{
m_flOldPlayerZ = flCurrentPlayerZ;
}
if (flCurrentPlayerZ - m_flOldPlayerZ >stepSize)
{
m_flOldPlayerZ = flCurrentPlayerZ -stepSize;
}
}
else
{
if (m_flOldPlayerZ < flCurrentPlayerZ)
{
m_flOldPlayerZ = flCurrentPlayerZ;
}
if (flCurrentPlayerZ - m_flOldPlayerZ <-stepSize)
{
m_flOldPlayerZ = flCurrentPlayerZ +stepSize;
}
}

eyeOrigin[2] += m_flOldPlayerZ - flCurrentPlayerZ;
}
else
{
m_flOldPlayerZ = flCurrentPlayerZ;
m_flOldPlayerViewOffsetZ = flCurrentPlayerViewOffsetZ;
}
```

Note:This issue was fixed in the 2006-01-12 SDK Update

Fix: This is fixed in the latest (February 12th or later) SDK from Valve by adding the files to the build:

```--- mod/src/dlls/hl_sdk.vcproj  2005-08-04 17:01:08.000000000 -0500
+++ mod/src/dlls/hl_sdk.vcproj  2006-02-12 13:52:33.000000000 -0600
@@ -3374,6 +3375,12 @@
Name="HL2MP"
Filter="">
<File
+                                       RelativePath=".\hl2mp_dll\hl2mp_bot_temp.cpp">
+                               </File>
+                               <File
+                                       RelativePath=".\hl2mp_dll\hl2mp_bot_temp.h">
+                               </File>
+                               <File
RelativePath=".\hl2mp_dll\hl2mp_client.cpp">
</File>
<File
```

Note:This issue was fixed in the 2006-08-04 SDK Update

Add after `float flPercent = (zCoords[iCurParticle] - minZ) / (maxZ - minZ);`:

```// DM: WTF happens here?
if ( (maxZ - minZ) == 0 || flPercent < 0 )
flPercent = 0.0f;
```

## vphysics patch from Jay at Valve

Note:This issue was fixed in the 2006-08-04 SDK Update

In addition to the vphysics bug/feature listed below where ShouldCollide can cause it to engage Physical Mayhem, an additional requirement for vphysics is this - again quoted from Jay. Need to figure out where in the code to patch in some docs on this - in the meantime:

`Calling UTIL_Remove() or delete on an entity during a callback may corrupt vphysics.`

The following patch uses an assert to document this requirement from the closed-source side of things:

```--- mod/src/dlls/physics.cpp    2005/10/16 16:26:25     1.4
+++ mod/src/dlls/physics.cpp    2006/05/29 17:39:03
@@ -141,6 +141,7 @@

// IPhysicsCollisionSolver
int             ShouldCollide( IPhysicsObject *pObj0, IPhysicsObject *pObj1, void *pGameData0, void *pGameData1 );
+       int             ShouldCollide_Default(IPhysicsObject *pObj0, IPhysicsObject *pObj1, void *pGameData0, void *pGameData1);
int             ShouldSolvePenetration( IPhysicsObject *pObj0, IPhysicsObject *pObj1, void *pGameData0, void *pGameData1, float dt );
bool    ShouldFreezeObject( IPhysicsObject *pObject ) { return true; }
@@ -482,6 +483,21 @@
}

int CCollisionEvent::ShouldCollide( IPhysicsObject *pObj0, IPhysicsObject *pObj1, void *pGameData0, void *pGameData1 )
+{
+       int x0 = ShouldCollide_Default(pObj0, pObj1, pGameData0, pGameData1);
+#if !defined(NDEBUG)
+       int x1 = ShouldCollide_Default(pObj1, pObj0, pGameData1, pGameData0);
+       if ( x0 != x1 )
+       {
+               Assert(0 && "ShouldCollide must return the same value regardless of the order of the two objects that are passed in");
+               ShouldCollide_Default(pObj0, pObj1, pGameData0, pGameData1);
+               ShouldCollide_Default(pObj1, pObj0, pGameData1, pGameData0);
+       }
+#endif
+       return x0;
+}
+
+int CCollisionEvent::ShouldCollide_Default( IPhysicsObject *pObj0, IPhysicsObject *pObj1, void *pGameData0, void *pGameData1 )
{
CallbackContext check(this);
```

Here's another for Jay. I haven't tested this yet, but what's the worst that it could do? :)

```--- ./mod/src/game_shared/physics_main_shared.cpp       2005/02/18 04:45:54     1.1.1.1
+++ ./mod/src/game_shared/physics_main_shared.cpp       2005/11/04 02:01:53
@@ -371,6 +371,8 @@
}

+
//-----------------------------------------------------------------------------
// Purpose:
@@ -380,6 +382,10 @@
{
{
+        {
+        }
}
@@ -442,7 +448,9 @@
//-----------------------------------------------------------------------------
void CBaseEntity::PhysicsCheckForEntityUntouch( void )
{
+       Assert( g_pNextLink == NULL );
+

if ( root )
@@ -453,7 +461,7 @@
while ( link != root )
{

// these touchlinks are not polled.  The ents are touching due to an outside
// system that will add/delete them as necessary (vphysics in this case)
@@ -476,7 +484,7 @@
}
}

}

g_bCleanupDatObject = saveCleanup;
@@ -489,6 +497,8 @@
}
}