player space gyro and split off from cmd turning

This commit is contained in:
minenice55 2026-04-02 13:39:08 -04:00
parent 9730882fe4
commit 493e6e96fa
4 changed files with 27 additions and 17 deletions

View file

@ -5102,8 +5102,9 @@ static boolean CheckForSpeedHacks(UINT8 p)
{
if (netcmds[maketic%BACKUPTICS][p].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][p].forwardmove < -MAXPLMOVE
|| netcmds[maketic%BACKUPTICS][p].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][p].sidemove < -MAXPLMOVE
|| netcmds[maketic%BACKUPTICS][p].throwdir > KART_FULLTURN || netcmds[maketic%BACKUPTICS][p].throwdir < -KART_FULLTURN
|| netcmds[maketic%BACKUPTICS][p].turning > KART_FULLTURN || netcmds[maketic%BACKUPTICS][p].turning < -KART_FULLTURN
|| netcmds[maketic%BACKUPTICS][p].throwdir > KART_FULLTURN || netcmds[maketic%BACKUPTICS][p].throwdir < -KART_FULLTURN)
)
{
CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), playernode[p]);
//D_Clearticcmd(k);

View file

@ -64,11 +64,11 @@ typedef enum
// 16 bytes long now!
struct ticcmd_t
{
SINT8 forwardmove; // -MAXPLMOVE to MAXPLMOVE (50)
SINT8 sidemove; // -MAXPLMOVE to MAXPLMOVE (50)
INT16 turning; // Turn speed
SINT8 forwardmove; // -MAXPLMOVE to MAXPLMOVE (50) (has anticheat)
SINT8 sidemove; // -MAXPLMOVE to MAXPLMOVE (50) (has anticheat)
INT16 turning; // "Steering Wheel" turn speed when driving (has anticheat)
INT16 angle; // Predicted angle, use me if you can!
INT16 throwdir; // Aiming direction
INT16 throwdir; // Forwards/Backwards item use direction (has anticheat)
INT16 aiming; // vertical aiming, see G_BuildTicCmd
UINT16 buttons;
UINT8 latency; // Netgames: how many tics ago was this ticcmd generated from this player's end?

View file

@ -1557,15 +1557,22 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
cmd->angle -= (tspeed * KART_FULLTURN) / JOYAXISRANGE;
side += (accelerometertilt * 4) / JOYAXISRANGE;
//todo: control spectator camera using the gyro
//control spectator camera using the gyro
// player space gyro from http://gyrowiki.jibbsmart.com/blog:player-space-gyro-and-alternatives-explained
if (spectating)
{
fixed_t yawRelaxFactor = 141*FRACUNIT/100;
fixed_t worldYaw;
fixed_t deltaseconds = FixedDiv(FRACUNIT, max(cv_timescale.value, FRACUNIT/20))/TICRATE;
vector3_t gyro = G_GetGamepadCalibratedGyro(forplayer);
cmd->turning -= (FixedMul(FixedMul(gyro.y, M_PI_FIXED/180), deltaseconds) * 1) * (encoremode ? -1 : 1);
cmd->angle -= (FixedMul(FixedMul(gyro.y, M_PI_FIXED/180), deltaseconds) * 1) * (encoremode ? -1 : 1);
cmd->aiming -= (FixedMul(FixedMul(gyro.x, M_PI_FIXED/180), deltaseconds) * 1);
vector3_t gravnorm = G_GetGamepadGravity(forplayer);
vector2_t gyroYZ = {gyro.y, gyro.z};
FV3_Normalize(&gravnorm);
// use world yaw for yaw direction, local combined yaw for magnitude
worldYaw = FixedMul(gyroYZ.x, gravnorm.y) + FixedMul(gyroYZ.y, gravnorm.z); // dot product but just yaw and roll
// yes this is backwards intentionally
cmd->angle += ((FixedMul(min(FixedMul(abs(worldYaw), yawRelaxFactor), FV2_Magnitude(&gyroYZ)), deltaseconds)*180)/FRACUNIT) * intsign(worldYaw) * (encoremode ? -1 : 1);
cmd->aiming -= (((FixedMul(gyro.x, deltaseconds)*180)/FRACUNIT));
}
}
else if (joystickvector.xaxis != 0)
@ -1579,7 +1586,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
if (spectating)
{
INT32 mousex = gamekeydown[0][KEY_MOUSEMOVE+3] - gamekeydown[0][KEY_MOUSEMOVE+2];
cmd->turning -= (mousex * 8) * (encoremode ? -1 : 1);
cmd->angle -= (mousex * 8) * (encoremode ? -1 : 1);
}
@ -1758,11 +1764,14 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
cmd->turning = KART_FULLTURN;
else if (cmd->turning < -KART_FULLTURN)
cmd->turning = -KART_FULLTURN;
if (cmd->angle > KART_FULLTURN)
cmd->angle = KART_FULLTURN;
else if (cmd->angle < -KART_FULLTURN)
cmd->angle = -KART_FULLTURN;
if (!spectating)
{
if (cmd->angle > KART_FULLTURN)
cmd->angle = KART_FULLTURN;
else if (cmd->angle < -KART_FULLTURN)
cmd->angle = -KART_FULLTURN;
}
if (cmd->throwdir > KART_FULLTURN)
cmd->throwdir = KART_FULLTURN;

View file

@ -2831,7 +2831,7 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num)
cam->reset_aiming = false;
}
cam->angle += cmd->turning << TICCMD_REDUCE;
cam->angle = cmd->angle << TICCMD_REDUCE;
// camera movement:
if (!cam->button_a_held)