This is a multi-part message in MIME format.
--
[ Picked text/plain from multipart/alternative ]
>
>
>>/ First, for some reason the client shows the platform as class
>/>/ "func_platrot" which is correct. But the the server lists the
>/>/ same entity as "func_plat" (the base class). I discovered
>/>/ this by accident by printing the classname of the ground
>/>/ entity indentified in the
>/>/ ClassifyPosition() routine. (I remade the map to force all
>/>/ the plats to func_plat and this problem went away, but the
>/>/ other problems remained.)
>/
>That sounds like a bug.  How are you printing the class name?  Anyway,
>probably not the root problem.
>
>
>
I did the following to find the weirdness with the classname: (inside
the CGameMovement::CategorizePosition( void ), about line 3280)

 if (pm.m_pEnt)
{
#ifdef GAME_DLL
    Msg("svr base: %s\n", pm.m_pEnt->GetClassname());
#else
   Msg("cl base: %s\n", pm.m_pEnt->GetClassname());
#endif
}

SetGroundEntity( pm.m_pEnt );  // Otherwise, point to index of ent under us.

>>/ Third, the jerkiness seems to be from the player being kicked
>/>/ up into the air (sorta like going up a stair step) and then
>/>/ falling back to the plat. The result is that the FL_ONGROUND
>/>/ flag is oscillating randomly (along with the ground entity
>/>/ switching from NULL, to the platform, and back to NULL) while
>/>/ the platform is in motion. The weird thing is that the code
>/>/ used to navigate stairs doesn't seem to be the thing that's
>/>/ doing this.
>/
>It sounds like the player isn't finding the ground entity.  There was
>another bug we fixed in episode 1 that could have fixed this:
>
>/src/game_shared/collisionproperty.cpp:
>
>void CCollisionProperty::CollisionAABBToWorldAABB( const Vector
>&entityMins,
>       const Vector &entityMaxs, Vector *pWorldMins, Vector *pWorldMaxs
>) const
>{
>
>// delete this section
>       if ( IsSolidFlagSet(FSOLID_ROOT_PARENT_ALIGNED) )
>       {
>               matrix3x4_t mat;
>               // Get Root Parent's axes - align box to those
>               MatrixCopy( *GetRootParentToWorldTransform(), mat );
>               MatrixSetColumn( GetCollisionOrigin(), 3, mat );
>               TransformAABB( mat, entityMins, entityMaxs, *pWorldMins,
>*pWorldMaxs );
>               return;
>       }
>// end delete
>
>
>this code was made obsolete hadn't been removed.  It can cause problems
>with players riding on rotating entities set to SOLID_BSP.
>
>You might give it a try.  I haven't tried to debug or repro this problem
>- I'm just reading the messages here, so again I have no idea if this
>will fix the problem you're seeing.
>
>Jay
>

I'll try that. But the player does seem to be seeing the ground entity.
But it appears he's bouncing off it. The player touches the moving plat,
gets kick up,  gravity takes over, and the plat catches up to the
falling player and the cycle repeats.

This is just a guess, but I think this has something to do with the
interpolation of the plat's position and speed. The client sees the
movement as a smooth due to the client-side interpolation. But since the
server physics seems to be run far less often that the client frame
rate, I think the server is 'stair-stepping' the position of the plat
causing the player to skip up everytime the plat's position gets updated
on the server. Maybe you could confirm this guess. If this is indeed the
case, I would be tempted to add code to do the needed interpolation
server-side, but I need to know what to use for the 'time since the last
physics update' on the server side to do the necessary interpolation
between physics frames. I'm guessing there is a global variable
somewhere to get this.

BTW: why would the m_vecVelocity read as 0 on the server for a moving plat?
--

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to