- renamed the fields in SW's packet structure to match Duke's.

Preparation for moving the packet management into public code.
This commit is contained in:
Christoph Oelckers 2020-08-25 22:06:01 +02:00
parent 70cac1db54
commit 84b6af24d3
5 changed files with 52 additions and 63 deletions

View file

@ -1701,7 +1701,7 @@ drawscreen(PLAYERp pp, double smoothratio)
// TODO: It'd be better to check pp->input.q16angvel instead, problem is that // TODO: It'd be better to check pp->input.q16angvel instead, problem is that
// it's been repurposed for the q16ang diff while tying input to framerate // it's been repurposed for the q16ang diff while tying input to framerate
if (PedanticMode || (pp != Player+myconnectindex) || if (PedanticMode || (pp != Player+myconnectindex) ||
(TEST(pp->Flags, PF_DEAD) && (loc.q16angvel == 0))) (TEST(pp->Flags, PF_DEAD) && (loc.q16avel == 0)))
{ {
tq16ang = camerapp->oq16ang + xs_CRoundToInt(fmulscale16(NORM_Q16ANGLE(camerapp->q16ang + fix16_from_int(1024) - camerapp->oq16ang) - fix16_from_int(1024), smoothratio)); tq16ang = camerapp->oq16ang + xs_CRoundToInt(fmulscale16(NORM_Q16ANGLE(camerapp->q16ang + fix16_from_int(1024) - camerapp->oq16ang) - fix16_from_int(1024), smoothratio));
tq16horiz = camerapp->oq16horiz + xs_CRoundToInt(fmulscale16(camerapp->q16horiz - camerapp->oq16horiz, smoothratio)); tq16horiz = camerapp->oq16horiz + xs_CRoundToInt(fmulscale16(camerapp->q16horiz - camerapp->oq16horiz, smoothratio));

View file

@ -921,28 +921,17 @@ enum
}; };
#pragma pack(push,1)
typedef struct
{
int16_t vel;
int16_t svel;
int8_t angvel;
int8_t aimvel;
int32_t bits;
} OLD_SW_PACKET;
// TODO: Support compatible read/write of struct for big-endian // TODO: Support compatible read/write of struct for big-endian
typedef struct struct SW_PACKET
{ {
int16_t vel; int16_t fvel;
int16_t svel; int16_t svel;
fix16_t q16angvel; fix16_t q16avel;
fix16_t q16aimvel; fix16_t q16aimvel;
fix16_t q16ang; fix16_t q16ang;
fix16_t q16horiz; fix16_t q16horz;
int32_t bits; int32_t bits;
} SW_PACKET; };
#pragma pack(pop)
extern SW_PACKET loc; extern SW_PACKET loc;

View file

@ -296,12 +296,12 @@ getinput(SW_PACKET *loc, SWBOOL tied)
pp->oq16horiz += pp->camq16horiz - prevcamq16horiz; pp->oq16horiz += pp->camq16horiz - prevcamq16horiz;
} }
loc->vel += vel; loc->fvel += vel;
loc->svel += svel; loc->svel += svel;
if (!tied) if (!tied)
{ {
vel = clamp(loc->vel, -MAXVEL, MAXVEL); vel = clamp(loc->fvel, -MAXVEL, MAXVEL);
svel = clamp(loc->svel, -MAXSVEL, MAXSVEL); svel = clamp(loc->svel, -MAXSVEL, MAXSVEL);
momx = mulscale9(vel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang) + 512)]); momx = mulscale9(vel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang) + 512)]);
@ -310,11 +310,11 @@ getinput(SW_PACKET *loc, SWBOOL tied)
momx += mulscale9(svel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang))]); momx += mulscale9(svel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang))]);
momy += mulscale9(svel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang) + 1536)]); momy += mulscale9(svel, sintable[NORM_ANGLE(fix16_to_int(newpp->q16ang) + 1536)]);
loc->vel = momx; loc->fvel = momx;
loc->svel = momy; loc->svel = momy;
} }
loc->q16angvel += q16angvel; loc->q16avel += q16angvel;
loc->q16aimvel += q16aimvel; loc->q16aimvel += q16aimvel;
if (!CommEnabled) if (!CommEnabled)

View file

@ -73,16 +73,16 @@ extern char sync_first[MAXSYNCBYTES][60];
extern int sync_found; extern int sync_found;
// //
// Tic Duplication - so you can move multiple times per packet // Tic Duplication - so you can move multiple times per packet. This is SW_PACKET with the 16 bit values extended to 32 bit.
// //
typedef struct typedef struct
{ {
int32_t vel; int32_t fvel;
int32_t svel; int32_t svel;
fix16_t q16angvel; fix16_t q16avel;
fix16_t q16aimvel; fix16_t q16aimvel;
fix16_t q16ang; fix16_t q16ang;
fix16_t q16horiz; fix16_t q16horz;
int32_t bits; int32_t bits;
} SW_AVERAGE_PACKET; } SW_AVERAGE_PACKET;
@ -198,12 +198,12 @@ UpdateInputs(void)
getinput(&loc, FALSE); getinput(&loc, FALSE);
AveragePacket.vel += loc.vel; AveragePacket.fvel += loc.fvel;
AveragePacket.svel += loc.svel; AveragePacket.svel += loc.svel;
AveragePacket.q16angvel += loc.q16angvel; AveragePacket.q16avel += loc.q16avel;
AveragePacket.q16aimvel += loc.q16aimvel; AveragePacket.q16aimvel += loc.q16aimvel;
AveragePacket.q16ang = Player[myconnectindex].camq16ang; AveragePacket.q16ang = Player[myconnectindex].camq16ang;
AveragePacket.q16horiz = Player[myconnectindex].camq16horiz; AveragePacket.q16horz = Player[myconnectindex].camq16horiz;
SET(AveragePacket.bits, loc.bits); SET(AveragePacket.bits, loc.bits);
Bmemset(&loc, 0, sizeof(loc)); Bmemset(&loc, 0, sizeof(loc));
@ -220,12 +220,12 @@ UpdateInputs(void)
return; return;
} }
loc.vel = AveragePacket.vel / MovesPerPacket; loc.fvel = AveragePacket.fvel / MovesPerPacket;
loc.svel = AveragePacket.svel / MovesPerPacket; loc.svel = AveragePacket.svel / MovesPerPacket;
loc.q16angvel = fix16_div(AveragePacket.q16angvel, fix16_from_int(MovesPerPacket)); loc.q16avel = fix16_div(AveragePacket.q16avel, fix16_from_int(MovesPerPacket));
loc.q16aimvel = fix16_div(AveragePacket.q16aimvel, fix16_from_int(MovesPerPacket)); loc.q16aimvel = fix16_div(AveragePacket.q16aimvel, fix16_from_int(MovesPerPacket));
loc.q16ang = AveragePacket.q16ang; loc.q16ang = AveragePacket.q16ang;
loc.q16horiz = AveragePacket.q16horiz; loc.q16horz = AveragePacket.q16horz;
loc.bits = AveragePacket.bits; loc.bits = AveragePacket.bits;
memset(&AveragePacket, 0, sizeof(AveragePacket)); memset(&AveragePacket, 0, sizeof(AveragePacket));

View file

@ -1663,7 +1663,7 @@ DoPlayerTurnBoat(PLAYERp pp)
if (sop->drive_angspeed) if (sop->drive_angspeed)
{ {
int drive_oangvel = pp->drive_angvel; int drive_oangvel = pp->drive_angvel;
pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16angvel), sop->drive_angspeed); pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16avel), sop->drive_angspeed);
angslide = sop->drive_angslide; angslide = sop->drive_angslide;
pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide; pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide;
@ -1672,7 +1672,7 @@ DoPlayerTurnBoat(PLAYERp pp)
} }
else else
{ {
angvel = fix16_to_int(pp->input.q16angvel) * PLAYER_TURN_SCALE; angvel = fix16_to_int(pp->input.q16avel) * PLAYER_TURN_SCALE;
angvel += angvel - DIV4(angvel); angvel += angvel - DIV4(angvel);
angvel = DIV32(angvel * synctics); angvel = DIV32(angvel * synctics);
} }
@ -1695,7 +1695,7 @@ DoPlayerTurnTank(PLAYERp pp, int z, int floor_dist)
int angslide; int angslide;
int drive_oangvel = pp->drive_angvel; int drive_oangvel = pp->drive_angvel;
pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16angvel), sop->drive_angspeed); pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16avel), sop->drive_angspeed);
angslide = sop->drive_angslide; angslide = sop->drive_angslide;
pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide; pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide;
@ -1704,7 +1704,7 @@ DoPlayerTurnTank(PLAYERp pp, int z, int floor_dist)
} }
else else
{ {
angvel = DIV8(fix16_to_int(pp->input.q16angvel) * synctics); angvel = DIV8(fix16_to_int(pp->input.q16avel) * synctics);
} }
if (angvel != 0) if (angvel != 0)
@ -1728,7 +1728,7 @@ DoPlayerTurnTankRect(PLAYERp pp, int *x, int *y, int *ox, int *oy)
int angslide; int angslide;
int drive_oangvel = pp->drive_angvel; int drive_oangvel = pp->drive_angvel;
pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16angvel), sop->drive_angspeed); pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16avel), sop->drive_angspeed);
angslide = sop->drive_angslide; angslide = sop->drive_angslide;
pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide; pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide;
@ -1737,7 +1737,7 @@ DoPlayerTurnTankRect(PLAYERp pp, int *x, int *y, int *ox, int *oy)
} }
else else
{ {
angvel = DIV8(fix16_to_int(pp->input.q16angvel) * synctics); angvel = DIV8(fix16_to_int(pp->input.q16avel) * synctics);
} }
if (angvel != 0) if (angvel != 0)
@ -1766,9 +1766,9 @@ DoPlayerTurnTurret(PLAYERp pp)
fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1); fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1);
last_input = pp->inputfifo[fifo_ndx]; last_input = pp->inputfifo[fifo_ndx];
if (pp->input.q16angvel && !last_input.q16angvel) if (pp->input.q16avel && !last_input.q16avel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else if (!pp->input.q16angvel && last_input.q16angvel) else if (!pp->input.q16avel && last_input.q16avel)
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
} }
@ -1777,7 +1777,7 @@ DoPlayerTurnTurret(PLAYERp pp)
int angslide; int angslide;
int drive_oangvel = pp->drive_angvel; int drive_oangvel = pp->drive_angvel;
pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16angvel), sop->drive_angspeed); pp->drive_angvel = mulscale16(fix16_to_int(pp->input.q16avel), sop->drive_angspeed);
angslide = sop->drive_angslide; angslide = sop->drive_angslide;
pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide; pp->drive_angvel = (pp->drive_angvel + (drive_oangvel*(angslide-1)))/angslide;
@ -1786,7 +1786,7 @@ DoPlayerTurnTurret(PLAYERp pp)
} }
else else
{ {
angvel = DIV4(fix16_to_int(pp->input.q16angvel) * synctics); angvel = DIV4(fix16_to_int(pp->input.q16avel) * synctics);
} }
if (angvel != 0) if (angvel != 0)
@ -1922,7 +1922,7 @@ DoPlayerHorizon(PLAYERp pp, fix16_t *pq16horiz, fix16_t q16aimvel)
if (!PedanticMode && (pq16horiz == &pp->q16horiz)) if (!PedanticMode && (pq16horiz == &pp->q16horiz))
{ {
SET(pp->Flags2, PF2_INPUT_CAN_AIM); SET(pp->Flags2, PF2_INPUT_CAN_AIM);
pp->q16horiz = pp->input.q16horiz; pp->q16horiz = pp->input.q16horz;
if ((pp == &Player[myconnectindex]) || (pp == ppp)) // No coop view? if ((pp == &Player[myconnectindex]) || (pp == ppp)) // No coop view?
pp->oq16horiz = pp->q16horiz; pp->oq16horiz = pp->q16horiz;
return; return;
@ -2596,7 +2596,7 @@ DoPlayerMove(PLAYERp pp)
SlipSlope(pp); SlipSlope(pp);
DoPlayerTurn(pp, &pp->q16ang, pp->input.q16angvel); DoPlayerTurn(pp, &pp->q16ang, pp->input.q16avel);
pp->oldposx = pp->posx; pp->oldposx = pp->posx;
pp->oldposy = pp->posy; pp->oldposy = pp->posy;
@ -2613,7 +2613,7 @@ DoPlayerMove(PLAYERp pp)
pp->oxvect = pp->xvect; pp->oxvect = pp->xvect;
pp->oyvect = pp->yvect; pp->oyvect = pp->yvect;
pp->xvect += ((pp->input.vel*synctics*2)<<6); pp->xvect += ((pp->input.fvel*synctics*2)<<6);
pp->yvect += ((pp->input.svel*synctics*2)<<6); pp->yvect += ((pp->input.svel*synctics*2)<<6);
friction = pp->friction; friction = pp->friction;
@ -2871,9 +2871,9 @@ DoPlayerMoveBoat(PLAYERp pp)
fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1); fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1);
last_input = pp->inputfifo[fifo_ndx]; last_input = pp->inputfifo[fifo_ndx];
if (labs(pp->input.vel|pp->input.svel) && !labs(last_input.vel|last_input.svel)) if (labs(pp->input.fvel|pp->input.svel) && !labs(last_input.fvel|last_input.svel))
PlaySOsound(pp->sop->mid_sector,SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector,SO_DRIVE_SOUND);
else if (!labs(pp->input.vel|pp->input.svel) && labs(last_input.vel|last_input.svel)) else if (!labs(pp->input.fvel|pp->input.svel) && labs(last_input.fvel|last_input.svel))
PlaySOsound(pp->sop->mid_sector,SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector,SO_IDLE_SOUND);
} }
@ -2889,7 +2889,7 @@ DoPlayerMoveBoat(PLAYERp pp)
if (sop->drive_speed) if (sop->drive_speed)
{ {
pp->xvect = mulscale6(pp->input.vel, sop->drive_speed); pp->xvect = mulscale6(pp->input.fvel, sop->drive_speed);
pp->yvect = mulscale6(pp->input.svel, sop->drive_speed); pp->yvect = mulscale6(pp->input.svel, sop->drive_speed);
// does sliding/momentum // does sliding/momentum
@ -2898,7 +2898,7 @@ DoPlayerMoveBoat(PLAYERp pp)
} }
else else
{ {
pp->xvect += ((pp->input.vel*synctics*2)<<6); pp->xvect += ((pp->input.fvel*synctics*2)<<6);
pp->yvect += ((pp->input.svel*synctics*2)<<6); pp->yvect += ((pp->input.svel*synctics*2)<<6);
pp->xvect = mulscale16(pp->xvect, BOAT_FRICTION); pp->xvect = mulscale16(pp->xvect, BOAT_FRICTION);
@ -3063,7 +3063,7 @@ DriveCrush(PLAYERp pp, int *x, int *y)
return; return;
// not moving - don't crush // not moving - don't crush
if ((pp->xvect|pp->yvect) == 0 && pp->input.q16angvel == 0) if ((pp->xvect|pp->yvect) == 0 && pp->input.q16avel == 0)
return; return;
// main sector // main sector
@ -3235,9 +3235,9 @@ DoPlayerMoveTank(PLAYERp pp)
fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1); fifo_ndx = (movefifoplc-2) & (MOVEFIFOSIZ - 1);
last_input = pp->inputfifo[fifo_ndx]; last_input = pp->inputfifo[fifo_ndx];
if (labs(pp->input.vel|pp->input.svel) && !labs(last_input.vel|last_input.svel)) if (labs(pp->input.fvel|pp->input.svel) && !labs(last_input.fvel|last_input.svel))
PlaySOsound(pp->sop->mid_sector,SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector,SO_DRIVE_SOUND);
else if (!labs(pp->input.vel|pp->input.svel) && labs(last_input.vel|last_input.svel)) else if (!labs(pp->input.fvel|pp->input.svel) && labs(last_input.fvel|last_input.svel))
PlaySOsound(pp->sop->mid_sector,SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector,SO_IDLE_SOUND);
} }
@ -3251,7 +3251,7 @@ DoPlayerMoveTank(PLAYERp pp)
if (sop->drive_speed) if (sop->drive_speed)
{ {
pp->xvect = mulscale6(pp->input.vel, sop->drive_speed); pp->xvect = mulscale6(pp->input.fvel, sop->drive_speed);
pp->yvect = mulscale6(pp->input.svel, sop->drive_speed); pp->yvect = mulscale6(pp->input.svel, sop->drive_speed);
// does sliding/momentum // does sliding/momentum
@ -3260,7 +3260,7 @@ DoPlayerMoveTank(PLAYERp pp)
} }
else else
{ {
pp->xvect += ((pp->input.vel*synctics*2)<<6); pp->xvect += ((pp->input.fvel*synctics*2)<<6);
pp->yvect += ((pp->input.svel*synctics*2)<<6); pp->yvect += ((pp->input.svel*synctics*2)<<6);
pp->xvect = mulscale16(pp->xvect, TANK_FRICTION); pp->xvect = mulscale16(pp->xvect, TANK_FRICTION);
@ -3841,7 +3841,7 @@ DoPlayerClimb(PLAYERp pp)
if (Prediction) if (Prediction)
return; return;
pp->xvect += ((pp->input.vel*synctics*2)<<6); pp->xvect += ((pp->input.fvel*synctics*2)<<6);
pp->yvect += ((pp->input.svel*synctics*2)<<6); pp->yvect += ((pp->input.svel*synctics*2)<<6);
pp->xvect = mulscale16(pp->xvect, PLAYER_CLIMB_FRICTION); pp->xvect = mulscale16(pp->xvect, PLAYER_CLIMB_FRICTION);
pp->yvect = mulscale16(pp->yvect, PLAYER_CLIMB_FRICTION); pp->yvect = mulscale16(pp->yvect, PLAYER_CLIMB_FRICTION);
@ -5771,7 +5771,7 @@ DoPlayerBeginOperate(PLAYERp pp)
switch (sop->track) switch (sop->track)
{ {
case SO_TANK: case SO_TANK:
if (pp->input.vel|pp->input.svel) if (pp->input.fvel|pp->input.svel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -5780,7 +5780,7 @@ DoPlayerBeginOperate(PLAYERp pp)
break; break;
case SO_TURRET_MGUN: case SO_TURRET_MGUN:
case SO_TURRET: case SO_TURRET:
if (pp->input.q16angvel) if (pp->input.q16avel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -5788,7 +5788,7 @@ DoPlayerBeginOperate(PLAYERp pp)
DoPlayerBeginOperateTurret(pp); DoPlayerBeginOperateTurret(pp);
break; break;
case SO_SPEED_BOAT: case SO_SPEED_BOAT:
if (pp->input.vel|pp->input.svel) if (pp->input.fvel|pp->input.svel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -5859,7 +5859,7 @@ DoPlayerBeginRemoteOperate(PLAYERp pp, SECTOR_OBJECTp sop)
switch (sop->track) switch (sop->track)
{ {
case SO_TANK: case SO_TANK:
if (pp->input.vel|pp->input.svel) if (pp->input.fvel|pp->input.svel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -5868,7 +5868,7 @@ DoPlayerBeginRemoteOperate(PLAYERp pp, SECTOR_OBJECTp sop)
break; break;
case SO_TURRET_MGUN: case SO_TURRET_MGUN:
case SO_TURRET: case SO_TURRET:
if (pp->input.q16angvel) if (pp->input.q16avel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -5876,7 +5876,7 @@ DoPlayerBeginRemoteOperate(PLAYERp pp, SECTOR_OBJECTp sop)
DoPlayerBeginOperateTurret(pp); DoPlayerBeginOperateTurret(pp);
break; break;
case SO_SPEED_BOAT: case SO_SPEED_BOAT:
if (pp->input.vel|pp->input.svel) if (pp->input.fvel|pp->input.svel)
PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_DRIVE_SOUND);
else else
PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND); PlaySOsound(pp->sop->mid_sector, SO_IDLE_SOUND);
@ -6609,9 +6609,9 @@ void DoPlayerDeathFollowKiller(PLAYERp pp)
if (TEST(pp->Flags, PF_DEAD_HEAD|PF_HEAD_CONTROL)) if (TEST(pp->Flags, PF_DEAD_HEAD|PF_HEAD_CONTROL))
SET(pp->Flags2, PF2_INPUT_CAN_TURN); SET(pp->Flags2, PF2_INPUT_CAN_TURN);
if ((TEST(pp->Flags, PF_DEAD_HEAD) && pp->input.q16angvel != 0) || TEST(pp->Flags, PF_HEAD_CONTROL)) if ((TEST(pp->Flags, PF_DEAD_HEAD) && pp->input.q16avel != 0) || TEST(pp->Flags, PF_HEAD_CONTROL))
{ {
DoPlayerTurn(pp, &pp->q16ang, pp->input.q16angvel); DoPlayerTurn(pp, &pp->q16ang, pp->input.q16avel);
return; return;
} }
@ -7426,7 +7426,7 @@ void ChopsCheck(PLAYERp pp)
{ {
if (!M_Active() && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1) if (!M_Active() && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1)
{ {
if ((pp->input.bits|pp->input.vel|pp->input.svel|pp->input.q16angvel|pp->input.q16aimvel) || if ((pp->input.bits|pp->input.fvel|pp->input.svel|pp->input.q16avel|pp->input.q16aimvel) ||
TEST(pp->Flags, PF_CLIMBING|PF_FALLING|PF_DIVING)) TEST(pp->Flags, PF_CLIMBING|PF_FALLING|PF_DIVING))
{ {
// Hit a input key or other reason to stop chops // Hit a input key or other reason to stop chops