by mh » Mon Feb 20, 2012 5:13 pm
The nolerp flag in Fitz 666 is just U_STEP in different clothes.
Generally there are two basic cases for interpolation:
Entities with MOVETYPE_STEP don't get the old Quake interpolation (based on CL_LerpPoint) but should get position/rotation interpolation.
Entities without MOVETYPE_STEP are the other way around.
A number of other conditions can modify these (was the entity present on the last frame, etc) but these are the basic two that are relevant here.
A fatal flaw in the old QSG position/rotation interpolation is that it doesn't take this into account - it just applies it's interpolation to all MDLs irrespective. This is broken for a number of reasons - first because not all MDLs get MOVETYPE_STEP, and second because it's entirely possible for a brush or sprite model to be given MOVETYPE_STEP. That's why it had a lot of gnarly special case code for stuff like rockets and the view model.
DP105 has server-side interpolation which also takes account of entities needing to be on the ground, flying or swimming before they can be interpolated. It's worth looking over that code as I believe it to be infinitely superior to the old QSG tutorials. I'm not certain to what extent it's survived in current versions, but my instincts tell me that the necessary flags have been added to DP7 and it's now done client-side (likely in a substantially changed form).
So fix all of that and I believe one of the core problems will go away. There is a second problem with position/rotation interpolation and that is when an entity is standing on a plat, the plat moves but the entity doesn't. In that case the entity will be moved along with the plat, and if it has MOVETYPE_STEP set, it will be incorrectly interpolated, resulting in movement that is oh-so slightly out of sync with the plat it's on, so it will appear to judder or jiggle. I don't believe a QC-side fix is appropriate for this - it should be possible to pick up this case in the world/physics code and handle it seamlessly, but I haven't investigated much.