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.
2006-10-20 SDK to 2008-06-08 SDK
This Diff And Patch file will update from the 2006-08-04 SDK to the 2008-06-08 SDK: http://tinyurl.com/6m7rbr
It doesn't appear that any of the SDK Known Issues List are fixed by this update.
Copy over the following binary files:
- src/lib/public/raytrace.lib
- src/lib-vc7/public/maya/7.0/valveMaya.lib
- src/lib-vc7/public/raytrace.lib
- src/utils/hlmv/icon1.ico
SVN users should:
svn add src/public/maya src/utils/phonemeextractor src/utils/hlmv src/lib-vc7/public/maya svn rm src/cl_dll/client_scratch-2005.vcproj
2006-08-04 SDK to 2006-10-20 SDK
This Diff And Patch file will update from the 2006-08-04 SDK to the 2006-10-20 SDK: http://tinyurl.com/ygchpy
It's not yet been determined which, if any, of the SDK Known Issues List are fixed by this update.
Note that since this update contained .vcproj changes, a mod name ("aoa") unavoidably appears many times in the patch file - you'll want to find those spots and replace with your mod name and/or mod path.
2006-01-12 SDK to 2006-08-04 SDK
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
"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; }
BotPutInServer linker failures
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
Assert iAddBucket >= 0 && iAddBucket < NUM_BUCKETS
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
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; } int AdditionalCollisionChecksThisTick( int currentChecksDone ) @@ -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 @@ return link; } +static touchlink_t *g_pNextLink = NULL; + //----------------------------------------------------------------------------- // Purpose: // Input : *link - @@ -380,6 +382,10 @@ { if ( link ) { + if ( link == g_pNextLink ) + { + g_pNextLink = link->nextLink; + } --linksallocated; } g_EdictTouchLinks.Free( link ); @@ -442,7 +448,9 @@ //----------------------------------------------------------------------------- void CBaseEntity::PhysicsCheckForEntityUntouch( void ) { - touchlink_t *link, *nextLink; + Assert( g_pNextLink == NULL ); + + touchlink_t *link; touchlink_t *root = ( touchlink_t * )GetDataObject( TOUCHLINK ); if ( root ) @@ -453,7 +461,7 @@ link = root->nextLink; while ( link != root ) { - nextLink = link->nextLink; + g_pNextLink = link->nextLink; // 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 @@ } } - link = nextLink; + link = g_pNextLink; } g_bCleanupDatObject = saveCleanup; @@ -489,6 +497,8 @@ } } + g_pNextLink = NULL; + SetCheckUntouch( false ); }
Using the Sheild Scanner npc_cscanner is not possible unless you name the map with d3_c17 as a prefix
I was expecting the flag for strider scout scanner to be the shield scanner version of the npc_cscanner, but it seems that the flag is there, but currently in the default hl2 code it does nothing.
So I replaced in the Scanner constructor function the code that compares the first 6 letters of a map name to d3_c17 with
npc_scanner.cpp: Line 588 (211 in 2013 SDK)
DevMsg("CNPC_CScanner::Spawn: Invalid spotlight width %.1f (max %.1f).\n", m_flSpotlightGoalWidth, MAX_BEAM_WIDTH ); m_flSpotlightGoalWidth = MAX_BEAM_WIDTH; } +if( IsStriderScout() ) + { + // Streetwar scanners are claw scanners + m_bIsClawScanner = true; + } + else + { + m_bIsClawScanner = false; + } Precache(); if( m_bIsClawScanner )
Server Dispatching an Attached Particle Effect
When trying to dispatch a particle effect from the server to the client using DispatchParticleEffect( const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity, const char *pszAttachmentName, bool bResetAllParticlesOnEntity ) the client never receives the dispatch. This is because when you dispatch an effect, the recipient list is calculated based on whoever is in PAS range. Well, the origin for the effect is never initialized when you try to dispatch an effect that originates from an attachment point on an entity! The following is a fix to this problem:
particle_parse.cpp, Lines 196 - 219 In Function: void DispatchParticleEffect( const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity, int iAttachmentPoint, bool bResetAllParticlesOnEntity )
CORRECTED FUNCTION:
void DispatchParticleEffect( const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity, int iAttachmentPoint, bool bResetAllParticlesOnEntity )
{
CEffectData data;
data.m_nHitBox = GetParticleSystemIndex( pszParticleName );
if ( pEntity )
{
data.m_vOrigin = pEntity->GetAbsOrigin();
#ifdef CLIENT_DLL
data.m_hEntity = pEntity;
#else
data.m_nEntIndex = pEntity->entindex();
#endif
data.m_fFlags |= PARTICLE_DISPATCH_FROM_ENTITY;
}
data.m_nDamageType = iAttachType;
data.m_nAttachmentIndex = iAttachmentPoint;
if ( bResetAllParticlesOnEntity )
{
data.m_fFlags |= PARTICLE_DISPATCH_RESET_PARTICLES;
}
DispatchEffect( "ParticleEffect", data );
}
Note the addition of data.m_vOrigin, that is what the recipient list filter uses to calculate the PAS recipients and must be initialized even if the particle effect isn't ultimately going to use it.
Thirdperson player animations look like "Ice Skating"
The problem is Valve is using a local angle for its calculation of the movement heading, this resulted in it *looking* like the problem is fixed when the player is only running in a particular direction. If the player runs 90 degrees from 0 heading their forward/backward running plays the strafing animation, aka the animations are 90 degrees off from the heading, thus you get an ice skating look. The fix is as follows:
hl2mp_playeranimstate.cpp
Lines 570-573
Function: void CHL2MPPlayerAnimState::ComputePoseParam_MoveYaw( CStudioHdr *pStudioHdr )
STOCK SDK CODE:
QAngle angles = GetBasePlayer()->GetLocalAngles();
float ang = angles[ YAW ];
THE FIX:
float ang = m_flEyeYaw;
m_flEyeYaw is updated from the player and is the absolute eye angles (desired!) instead of the local angles.
You should also apply the fix for anims playing 180 degrees off kilter: http://forums.steampowered.com/forums/showpost.php?p=10741748&postcount=29
Other info and links
See SDK Known Issues List for issues in the latest SDK.