diff --git a/engine/client/cl_pmove.c b/engine/client/cl_pmove.c index 92027df3..913195f1 100644 --- a/engine/client/cl_pmove.c +++ b/engine/client/cl_pmove.c @@ -824,6 +824,27 @@ static void CL_SetupPMove( playermove_t *pmove, const local_state_t *from, const cd = &from->client; pmove->player_index = ps->number - 1; + + // a1ba: workaround bug on old protocol where the server refuse to send + // our local player in delta. cl.playernum, in theory, must be equal + // to our local player index anyway + // this might not be a real solution, since everything else will be bogus + // but we need to properly run prediction and avoid potential memory + // corruption + // either debug this, or remove when old protocol will be dropped!!! + if( cls.legacymode ) + { + if( pmove->player_index < 0 ) + { + pmove->player_index = bound( 0, cl.playernum, cl.maxclients - 1 ); + } + else + { + // if this happens, record a demo and send it to a1ba + Host_Error( "%s: ps->number == %d\n", __func__, ps->number ); + } + } + pmove->multiplayer = (cl.maxclients > 1); pmove->runfuncs = runfuncs; pmove->time = time * 1000.0f;