Make aiming relative too

This commit is contained in:
Sally Coolatta 2020-09-25 02:06:37 -04:00
parent e5009348f8
commit 672c4fb763
6 changed files with 61 additions and 56 deletions

View file

@ -683,9 +683,9 @@ const char *G_BuildMapName(INT32 map)
* Used whenever the player view is changed manually.
*
* \param aiming Pointer to the vertical angle to clip.
* \return Short version of the clipped angle for building a ticcmd.
* \return The clipped angle.
*/
INT16 G_ClipAimingPitch(INT32 *aiming)
INT32 G_ClipAimingPitch(INT32 *aiming)
{
INT32 limitangle;
@ -696,7 +696,7 @@ INT16 G_ClipAimingPitch(INT32 *aiming)
else if (*aiming < -limitangle)
*aiming = -limitangle;
return (INT16)((*aiming)>>16);
return (*aiming);
}
INT16 G_SoftwareClipAimingPitch(INT32 *aiming)
@ -877,7 +877,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
player_t *player = &players[g_localplayers[forplayer]];
camera_t *thiscam = &camera[forplayer];
INT32 *laim = &localaiming[forplayer];
INT32 *th = &turnheld[forplayer];
boolean *kbl = &keyboard_look[forplayer];
boolean *rd = &resetdown[forplayer];
@ -908,7 +907,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
// Kart, don't build a ticcmd if someone is resynching or the server is stopped too so we don't fly off course in bad conditions
if (paused || P_AutoPause() || (gamestate == GS_LEVEL && player->playerstate == PST_REBORN) || hu_resynching)
{
cmd->aiming = G_ClipAimingPitch(laim);
return;
}
@ -1074,39 +1072,33 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
*kbl = false;
// looking up/down
*laim += (mlooky<<19)*player_invert*screen_invert;
cmd->aiming += (mlooky<<19)*player_invert*screen_invert;
}
axis = PlayerJoyAxis(ssplayer, AXISLOOK);
if (analogjoystickmove && axis != 0 && lookaxis && player->spectator)
*laim += (axis<<16) * screen_invert;
cmd->aiming += (axis<<16) * screen_invert;
// spring back if not using keyboard neither mouselookin'
if (*kbl == false && !lookaxis && !mouseaiming)
*laim = 0;
cmd->aiming = 0;
if (player->spectator)
{
if (PlayerInputDown(ssplayer, gc_lookup) || (gamepadjoystickmove && axis < 0))
{
*laim += KB_LOOKSPEED * screen_invert;
cmd->aiming += KB_LOOKSPEED * screen_invert;
*kbl = true;
}
else if (PlayerInputDown(ssplayer, gc_lookdown) || (gamepadjoystickmove && axis > 0))
{
*laim -= KB_LOOKSPEED * screen_invert;
cmd->aiming -= KB_LOOKSPEED * screen_invert;
*kbl = true;
}
}
if (PlayerInputDown(ssplayer, gc_centerview)) // No need to put a spectator limit on this one though :V
*laim = 0;
// accept no mlook for network games
if (!cv_allowmlook.value)
*laim = 0;
cmd->aiming = G_ClipAimingPitch(laim);
cmd->aiming = 0;
}
mousex = mousey = mlooky = 0;

View file

@ -90,7 +90,7 @@ ticcmd_t *G_CopyTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n);
ticcmd_t *G_MoveTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n);
// clip the console player aiming to the view
INT16 G_ClipAimingPitch(INT32 *aiming);
INT32 G_ClipAimingPitch(INT32 *aiming);
INT16 G_SoftwareClipAimingPitch(INT32 *aiming);
typedef enum

View file

@ -6221,8 +6221,9 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
fixed_t p_speed;
fixed_t weightadjust;
fixed_t turnfixed = turnvalue * FRACUNIT;
fixed_t currentSpeed = 0;
if ((player->mo == NULL || P_MobjWasRemoved(player->mo)))
if (player->mo == NULL || P_MobjWasRemoved(player->mo))
{
return 0;
}
@ -6237,8 +6238,9 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
return 0;
}
// SRB2kart - no additional angle if not moving
if ((player->speed <= 0) // Not moving
currentSpeed = R_PointToDist2(0, 0, player->mo->momx, player->mo->momy);
if ((currentSpeed <= 0) // Not moving
&& ((player->cmd.buttons & BT_EBRAKEMASK) != BT_EBRAKEMASK) // not e-braking
&& (player->respawn.state == RESPAWNST_NONE)) // Not respawning
{

View file

@ -1532,7 +1532,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
diff |= MD_TRACER;
if (mobj->friction != ORIG_FRICTION)
diff |= MD_FRICTION;
if (mobj->movefactor != FRACUNIT) //if (mobj->movefactor != ORIG_FRICTION_FACTOR)
if (mobj->movefactor != FRACUNIT)
diff |= MD_MOVEFACTOR;
if (mobj->fuse)
diff |= MD_FUSE;
@ -2755,7 +2755,7 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
if (diff & MD_MOVEFACTOR)
mobj->movefactor = READFIXED(save_p);
else
mobj->movefactor = FRACUNIT; //mobj->movefactor = ORIG_FRICTION_FACTOR;
mobj->movefactor = FRACUNIT;
if (diff & MD_FUSE)
mobj->fuse = READINT32(save_p);
if (diff & MD_WATERTOP)

View file

@ -528,10 +528,7 @@ typedef struct
} friction_t;
// Friction defines.
#define ORIG_FRICTION (62914) ///< Original value.
//#define ORIG_FRICTION_RETRO (0xE8 << (FRACBITS-8))
//#define ORIG_FRICTION_NEO (62914)
#define ORIG_FRICTION_FACTOR (8 << (FRACBITS-8)) ///< Original value.
#define ORIG_FRICTION (0xF5 << (FRACBITS-8)) ///< Original value.
void T_Friction(friction_t *f);

View file

@ -2053,6 +2053,32 @@ static void P_3dMovement(player_t *player)
}
}
//
// P_UpdatePlayerAngle
//
// Updates player angleturn with cmd->turning
//
static void P_UpdatePlayerAngle(player_t *player)
{
ticcmd_t *cmd = &player->cmd;
angle_t angleChange = K_GetKartTurnValue(player, cmd->turning) << TICCMD_REDUCE;
player->angleturn += angleChange;
P_SetLocalAngle(player, P_GetLocalAngle(player) + angleChange);
if (!cv_allowmlook.value)
{
player->aiming = 0;
}
else
{
player->aiming += (cmd->aiming << TICCMD_REDUCE);
player->aiming = G_ClipAimingPitch((INT32 *)&player->aiming);
}
player->mo->angle = player->angleturn;
}
//
// P_SpectatorMovement
//
@ -2062,7 +2088,7 @@ static void P_SpectatorMovement(player_t *player)
{
ticcmd_t *cmd = &player->cmd;
player->mo->angle = player->angleturn;
P_UpdatePlayerAngle(player);
ticruned++;
if (!(cmd->flags & TICCMD_RECEIVED))
@ -2133,7 +2159,7 @@ void P_MovePlayer(player_t *player)
// MOVEMENT CODE //
//////////////////////
player->mo->angle = player->angleturn;
P_UpdatePlayerAngle(player);
ticruned++;
if (!(cmd->flags & TICCMD_RECEIVED))
@ -2747,11 +2773,10 @@ void P_InitCameraCmd(void)
static ticcmd_t *P_CameraCmd(camera_t *cam)
{
INT32 laim, th, tspeed, forward, axis; //i
INT32 th, tspeed, forward, axis; //i
// these ones used for multiple conditions
boolean turnleft, turnright, mouseaiming;
boolean invertmouse, lookaxis, usejoystick, kbl;
angle_t lang;
INT32 player_invert;
INT32 screen_invert;
ticcmd_t *cmd = &cameracmd;
@ -2761,16 +2786,11 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
if (!demo.playback)
return cmd; // empty cmd, no.
lang = democam.localangle;
laim = democam.localaiming;
th = democam.turnheld;
kbl = democam.keyboardlook;
G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver
//cmd->turning = (INT16)(lang >> 16);
cmd->aiming = G_ClipAimingPitch(&laim);
mouseaiming = true;
invertmouse = cv_invertmouse.value;
lookaxis = cv_lookaxis[0].value;
@ -2847,29 +2867,27 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
kbl = false;
// looking up/down
laim += (mlooky<<19)*player_invert*screen_invert;
cmd->aiming += (mlooky<<19)*player_invert*screen_invert;
axis = PlayerJoyAxis(1, AXISLOOK);
// spring back if not using keyboard neither mouselookin'
if (!kbl && !lookaxis && !mouseaiming)
laim = 0;
cmd->aiming = 0;
if (PlayerInputDown(1, gc_lookup) || (axis < 0))
{
laim += KB_LOOKSPEED * screen_invert;
cmd->aiming += KB_LOOKSPEED * screen_invert;
kbl = true;
}
else if (PlayerInputDown(1, gc_lookdown) || (axis > 0))
{
laim -= KB_LOOKSPEED * screen_invert;
cmd->aiming -= KB_LOOKSPEED * screen_invert;
kbl = true;
}
if (PlayerInputDown(1, gc_centerview)) // No need to put a spectator limit on this one though :V
laim = 0;
cmd->aiming = G_ClipAimingPitch(&laim);
cmd->aiming = 0;
mousex = mousey = mlooky = 0;
@ -2880,10 +2898,6 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
else if (cmd->forwardmove < -MAXPLMOVE)
cmd->forwardmove = -MAXPLMOVE;
lang += (cmd->turning << TICCMD_REDUCE);
democam.localangle = lang;
democam.localaiming = laim;
democam.turnheld = th;
democam.keyboardlook = kbl;
@ -2905,8 +2919,14 @@ void P_DemoCameraMovement(camera_t *cam)
// first off we need to get button input
cmd = P_CameraCmd(cam);
cam->aiming = cmd->aiming<<FRACBITS;
//cam->angle = cmd->angleturn << TICCMD_REDUCE;
cam->aiming += cmd->aiming << TICCMD_REDUCE;
cam->angle += cmd->turning << TICCMD_REDUCE;
democam.localangle += cmd->turning << TICCMD_REDUCE;
democam.localaiming += cmd->aiming << TICCMD_REDUCE;
cam->aiming = G_ClipAimingPitch((INT32 *)&cam->aiming);
democam.localaiming = G_ClipAimingPitch((INT32 *)&democam.localaiming);
// camera movement:
@ -4234,12 +4254,6 @@ void P_PlayerThink(player_t *player)
cmd = &player->cmd;
{
angle_t angleChange = K_GetKartTurnValue(player, cmd->turning) << TICCMD_REDUCE;
player->angleturn += angleChange;
P_SetLocalAngle(player, P_GetLocalAngle(player) + angleChange);
}
// SRB2kart
// Save the dir the player is holding
// to allow items to be thrown forward or backward.
@ -4700,7 +4714,7 @@ void P_ForceLocalAngle(player_t *player, angle_t angle)
angle = angle & ~UINT16_MAX;
for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
for (i = 0; i <= splitscreen; i++)
{
if (player == &players[g_localplayers[i]])
{