diff --git a/source/sw/src/interpso.cpp b/source/sw/src/interpso.cpp index ee296e90c..d8dbf7d01 100644 --- a/source/sw/src/interpso.cpp +++ b/source/sw/src/interpso.cpp @@ -191,6 +191,11 @@ void so_setinterpolationtics(SECTOR_OBJECTp sop, int16_t locktics) interp->lasttic = locktics; } +static inline bool so_nointerpolations(short track) +{ + return !cl_syncinput && (track >= SO_TURRET_MGUN && track <= SO_VEHICLE); +} + void so_updateinterpolations(void) // Stick at beginning of domovethings { int32_t i; @@ -202,8 +207,7 @@ void so_updateinterpolations(void) // Stick at beginning of domovethings for (sop = SectorObject, interp = so_interpdata; sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++) { - bool skip = !cl_syncinput && (sop->track == SO_TURRET); - if (SO_EMPTY(sop) || skip) + if (SO_EMPTY(sop) || so_nointerpolations(sop->track)) continue; if (interp->tic < interp->lasttic) interp->tic += synctics; @@ -241,8 +245,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b for (sop = SectorObject, interp = so_interpdata; sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++) { - bool skip = !cl_syncinput && (sop->track == SO_TURRET); - if (SO_EMPTY(sop) || skip) + if (SO_EMPTY(sop) || so_nointerpolations(sop->track)) continue; for (i = 0; i < interp->numinterpolations; i++) @@ -268,8 +271,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b for (sop = SectorObject, interp = so_interpdata; sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++) { - bool skip = !cl_syncinput && (sop->track == SO_TURRET); - if (SO_EMPTY(sop) || skip) + if (SO_EMPTY(sop) || so_nointerpolations(sop->track)) continue; // Check if interpolation has been explicitly disabled @@ -329,8 +331,7 @@ void so_restoreinterpolations(void) // Stick at end of drawscree for (sop = SectorObject, interp = so_interpdata; sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++) { - bool skip = !cl_syncinput && (sop->track == SO_TURRET); - if (SO_EMPTY(sop) || skip) + if (SO_EMPTY(sop) || so_nointerpolations(sop->track)) continue; for (i = 0, data = interp->data; i < interp->numinterpolations; i++, data++) diff --git a/source/sw/src/player.cpp b/source/sw/src/player.cpp index 7fe6e18fa..e2aa24f72 100644 --- a/source/sw/src/player.cpp +++ b/source/sw/src/player.cpp @@ -1669,6 +1669,11 @@ DoPlayerTurnVehicle(PLAYERp pp, fixed_t q16avel, int z, int floor_dist) sprite[pp->PlayerSprite].ang = FixedToInt(pp->q16ang); } } + + if (!cl_syncinput) + { + OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->oposx + mulscale16(pp->posx - pp->oposx, smoothratio), pp->oposy + mulscale16(pp->posy - pp->oposy, smoothratio)); + } } void @@ -3042,7 +3047,10 @@ DoPlayerMoveVehicle(PLAYERp pp) } save_sectnum = pp->cursectnum; - OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), MAXSO, MAXSO); + if (cl_syncinput) + { + OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), MAXSO, MAXSO); + } pp->cursectnum = pp->sop->op_main_sector; // for speed floor_dist = labs(z - pp->sop->floor_loz); @@ -3146,7 +3154,11 @@ DoPlayerMoveVehicle(PLAYERp pp) } } - OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->posx, pp->posy); + if (cl_syncinput) + { + OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->posx, pp->posy); + } + pp->cursectnum = save_sectnum; // for speed if (!cl_syncinput)