mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Make aiming relative too
This commit is contained in:
parent
e5009348f8
commit
672c4fb763
6 changed files with 61 additions and 56 deletions
26
src/g_game.c
26
src/g_game.c
|
|
@ -683,9 +683,9 @@ const char *G_BuildMapName(INT32 map)
|
||||||
* Used whenever the player view is changed manually.
|
* Used whenever the player view is changed manually.
|
||||||
*
|
*
|
||||||
* \param aiming Pointer to the vertical angle to clip.
|
* \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;
|
INT32 limitangle;
|
||||||
|
|
||||||
|
|
@ -696,7 +696,7 @@ INT16 G_ClipAimingPitch(INT32 *aiming)
|
||||||
else if (*aiming < -limitangle)
|
else if (*aiming < -limitangle)
|
||||||
*aiming = -limitangle;
|
*aiming = -limitangle;
|
||||||
|
|
||||||
return (INT16)((*aiming)>>16);
|
return (*aiming);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT16 G_SoftwareClipAimingPitch(INT32 *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]];
|
player_t *player = &players[g_localplayers[forplayer]];
|
||||||
camera_t *thiscam = &camera[forplayer];
|
camera_t *thiscam = &camera[forplayer];
|
||||||
INT32 *laim = &localaiming[forplayer];
|
|
||||||
INT32 *th = &turnheld[forplayer];
|
INT32 *th = &turnheld[forplayer];
|
||||||
boolean *kbl = &keyboard_look[forplayer];
|
boolean *kbl = &keyboard_look[forplayer];
|
||||||
boolean *rd = &resetdown[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
|
// 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)
|
if (paused || P_AutoPause() || (gamestate == GS_LEVEL && player->playerstate == PST_REBORN) || hu_resynching)
|
||||||
{
|
{
|
||||||
cmd->aiming = G_ClipAimingPitch(laim);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1074,39 +1072,33 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
*kbl = false;
|
*kbl = false;
|
||||||
|
|
||||||
// looking up/down
|
// looking up/down
|
||||||
*laim += (mlooky<<19)*player_invert*screen_invert;
|
cmd->aiming += (mlooky<<19)*player_invert*screen_invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = PlayerJoyAxis(ssplayer, AXISLOOK);
|
axis = PlayerJoyAxis(ssplayer, AXISLOOK);
|
||||||
if (analogjoystickmove && axis != 0 && lookaxis && player->spectator)
|
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'
|
// spring back if not using keyboard neither mouselookin'
|
||||||
if (*kbl == false && !lookaxis && !mouseaiming)
|
if (*kbl == false && !lookaxis && !mouseaiming)
|
||||||
*laim = 0;
|
cmd->aiming = 0;
|
||||||
|
|
||||||
if (player->spectator)
|
if (player->spectator)
|
||||||
{
|
{
|
||||||
if (PlayerInputDown(ssplayer, gc_lookup) || (gamepadjoystickmove && axis < 0))
|
if (PlayerInputDown(ssplayer, gc_lookup) || (gamepadjoystickmove && axis < 0))
|
||||||
{
|
{
|
||||||
*laim += KB_LOOKSPEED * screen_invert;
|
cmd->aiming += KB_LOOKSPEED * screen_invert;
|
||||||
*kbl = true;
|
*kbl = true;
|
||||||
}
|
}
|
||||||
else if (PlayerInputDown(ssplayer, gc_lookdown) || (gamepadjoystickmove && axis > 0))
|
else if (PlayerInputDown(ssplayer, gc_lookdown) || (gamepadjoystickmove && axis > 0))
|
||||||
{
|
{
|
||||||
*laim -= KB_LOOKSPEED * screen_invert;
|
cmd->aiming -= KB_LOOKSPEED * screen_invert;
|
||||||
*kbl = true;
|
*kbl = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PlayerInputDown(ssplayer, gc_centerview)) // No need to put a spectator limit on this one though :V
|
if (PlayerInputDown(ssplayer, gc_centerview)) // No need to put a spectator limit on this one though :V
|
||||||
*laim = 0;
|
cmd->aiming = 0;
|
||||||
|
|
||||||
// accept no mlook for network games
|
|
||||||
if (!cv_allowmlook.value)
|
|
||||||
*laim = 0;
|
|
||||||
|
|
||||||
cmd->aiming = G_ClipAimingPitch(laim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mousex = mousey = mlooky = 0;
|
mousex = mousey = mlooky = 0;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
ticcmd_t *G_MoveTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n);
|
||||||
|
|
||||||
// clip the console player aiming to the view
|
// clip the console player aiming to the view
|
||||||
INT16 G_ClipAimingPitch(INT32 *aiming);
|
INT32 G_ClipAimingPitch(INT32 *aiming);
|
||||||
INT16 G_SoftwareClipAimingPitch(INT32 *aiming);
|
INT16 G_SoftwareClipAimingPitch(INT32 *aiming);
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
||||||
|
|
@ -6221,8 +6221,9 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
||||||
fixed_t p_speed;
|
fixed_t p_speed;
|
||||||
fixed_t weightadjust;
|
fixed_t weightadjust;
|
||||||
fixed_t turnfixed = turnvalue * FRACUNIT;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -6237,8 +6238,9 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRB2kart - no additional angle if not moving
|
currentSpeed = R_PointToDist2(0, 0, player->mo->momx, player->mo->momy);
|
||||||
if ((player->speed <= 0) // Not moving
|
|
||||||
|
if ((currentSpeed <= 0) // Not moving
|
||||||
&& ((player->cmd.buttons & BT_EBRAKEMASK) != BT_EBRAKEMASK) // not e-braking
|
&& ((player->cmd.buttons & BT_EBRAKEMASK) != BT_EBRAKEMASK) // not e-braking
|
||||||
&& (player->respawn.state == RESPAWNST_NONE)) // Not respawning
|
&& (player->respawn.state == RESPAWNST_NONE)) // Not respawning
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1532,7 +1532,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
||||||
diff |= MD_TRACER;
|
diff |= MD_TRACER;
|
||||||
if (mobj->friction != ORIG_FRICTION)
|
if (mobj->friction != ORIG_FRICTION)
|
||||||
diff |= MD_FRICTION;
|
diff |= MD_FRICTION;
|
||||||
if (mobj->movefactor != FRACUNIT) //if (mobj->movefactor != ORIG_FRICTION_FACTOR)
|
if (mobj->movefactor != FRACUNIT)
|
||||||
diff |= MD_MOVEFACTOR;
|
diff |= MD_MOVEFACTOR;
|
||||||
if (mobj->fuse)
|
if (mobj->fuse)
|
||||||
diff |= MD_FUSE;
|
diff |= MD_FUSE;
|
||||||
|
|
@ -2755,7 +2755,7 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
|
||||||
if (diff & MD_MOVEFACTOR)
|
if (diff & MD_MOVEFACTOR)
|
||||||
mobj->movefactor = READFIXED(save_p);
|
mobj->movefactor = READFIXED(save_p);
|
||||||
else
|
else
|
||||||
mobj->movefactor = FRACUNIT; //mobj->movefactor = ORIG_FRICTION_FACTOR;
|
mobj->movefactor = FRACUNIT;
|
||||||
if (diff & MD_FUSE)
|
if (diff & MD_FUSE)
|
||||||
mobj->fuse = READINT32(save_p);
|
mobj->fuse = READINT32(save_p);
|
||||||
if (diff & MD_WATERTOP)
|
if (diff & MD_WATERTOP)
|
||||||
|
|
|
||||||
|
|
@ -528,10 +528,7 @@ typedef struct
|
||||||
} friction_t;
|
} friction_t;
|
||||||
|
|
||||||
// Friction defines.
|
// Friction defines.
|
||||||
#define ORIG_FRICTION (62914) ///< Original value.
|
#define ORIG_FRICTION (0xF5 << (FRACBITS-8)) ///< Original value.
|
||||||
//#define ORIG_FRICTION_RETRO (0xE8 << (FRACBITS-8))
|
|
||||||
//#define ORIG_FRICTION_NEO (62914)
|
|
||||||
#define ORIG_FRICTION_FACTOR (8 << (FRACBITS-8)) ///< Original value.
|
|
||||||
|
|
||||||
void T_Friction(friction_t *f);
|
void T_Friction(friction_t *f);
|
||||||
|
|
||||||
|
|
|
||||||
72
src/p_user.c
72
src/p_user.c
|
|
@ -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
|
// P_SpectatorMovement
|
||||||
//
|
//
|
||||||
|
|
@ -2062,7 +2088,7 @@ static void P_SpectatorMovement(player_t *player)
|
||||||
{
|
{
|
||||||
ticcmd_t *cmd = &player->cmd;
|
ticcmd_t *cmd = &player->cmd;
|
||||||
|
|
||||||
player->mo->angle = player->angleturn;
|
P_UpdatePlayerAngle(player);
|
||||||
|
|
||||||
ticruned++;
|
ticruned++;
|
||||||
if (!(cmd->flags & TICCMD_RECEIVED))
|
if (!(cmd->flags & TICCMD_RECEIVED))
|
||||||
|
|
@ -2133,7 +2159,7 @@ void P_MovePlayer(player_t *player)
|
||||||
// MOVEMENT CODE //
|
// MOVEMENT CODE //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
|
|
||||||
player->mo->angle = player->angleturn;
|
P_UpdatePlayerAngle(player);
|
||||||
|
|
||||||
ticruned++;
|
ticruned++;
|
||||||
if (!(cmd->flags & TICCMD_RECEIVED))
|
if (!(cmd->flags & TICCMD_RECEIVED))
|
||||||
|
|
@ -2747,11 +2773,10 @@ void P_InitCameraCmd(void)
|
||||||
|
|
||||||
static ticcmd_t *P_CameraCmd(camera_t *cam)
|
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
|
// these ones used for multiple conditions
|
||||||
boolean turnleft, turnright, mouseaiming;
|
boolean turnleft, turnright, mouseaiming;
|
||||||
boolean invertmouse, lookaxis, usejoystick, kbl;
|
boolean invertmouse, lookaxis, usejoystick, kbl;
|
||||||
angle_t lang;
|
|
||||||
INT32 player_invert;
|
INT32 player_invert;
|
||||||
INT32 screen_invert;
|
INT32 screen_invert;
|
||||||
ticcmd_t *cmd = &cameracmd;
|
ticcmd_t *cmd = &cameracmd;
|
||||||
|
|
@ -2761,16 +2786,11 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
if (!demo.playback)
|
if (!demo.playback)
|
||||||
return cmd; // empty cmd, no.
|
return cmd; // empty cmd, no.
|
||||||
|
|
||||||
lang = democam.localangle;
|
|
||||||
laim = democam.localaiming;
|
|
||||||
th = democam.turnheld;
|
th = democam.turnheld;
|
||||||
kbl = democam.keyboardlook;
|
kbl = democam.keyboardlook;
|
||||||
|
|
||||||
G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver
|
G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver
|
||||||
|
|
||||||
//cmd->turning = (INT16)(lang >> 16);
|
|
||||||
cmd->aiming = G_ClipAimingPitch(&laim);
|
|
||||||
|
|
||||||
mouseaiming = true;
|
mouseaiming = true;
|
||||||
invertmouse = cv_invertmouse.value;
|
invertmouse = cv_invertmouse.value;
|
||||||
lookaxis = cv_lookaxis[0].value;
|
lookaxis = cv_lookaxis[0].value;
|
||||||
|
|
@ -2847,29 +2867,27 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
kbl = false;
|
kbl = false;
|
||||||
|
|
||||||
// looking up/down
|
// looking up/down
|
||||||
laim += (mlooky<<19)*player_invert*screen_invert;
|
cmd->aiming += (mlooky<<19)*player_invert*screen_invert;
|
||||||
|
|
||||||
axis = PlayerJoyAxis(1, AXISLOOK);
|
axis = PlayerJoyAxis(1, AXISLOOK);
|
||||||
|
|
||||||
// spring back if not using keyboard neither mouselookin'
|
// spring back if not using keyboard neither mouselookin'
|
||||||
if (!kbl && !lookaxis && !mouseaiming)
|
if (!kbl && !lookaxis && !mouseaiming)
|
||||||
laim = 0;
|
cmd->aiming = 0;
|
||||||
|
|
||||||
if (PlayerInputDown(1, gc_lookup) || (axis < 0))
|
if (PlayerInputDown(1, gc_lookup) || (axis < 0))
|
||||||
{
|
{
|
||||||
laim += KB_LOOKSPEED * screen_invert;
|
cmd->aiming += KB_LOOKSPEED * screen_invert;
|
||||||
kbl = true;
|
kbl = true;
|
||||||
}
|
}
|
||||||
else if (PlayerInputDown(1, gc_lookdown) || (axis > 0))
|
else if (PlayerInputDown(1, gc_lookdown) || (axis > 0))
|
||||||
{
|
{
|
||||||
laim -= KB_LOOKSPEED * screen_invert;
|
cmd->aiming -= KB_LOOKSPEED * screen_invert;
|
||||||
kbl = true;
|
kbl = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PlayerInputDown(1, gc_centerview)) // No need to put a spectator limit on this one though :V
|
if (PlayerInputDown(1, gc_centerview)) // No need to put a spectator limit on this one though :V
|
||||||
laim = 0;
|
cmd->aiming = 0;
|
||||||
|
|
||||||
cmd->aiming = G_ClipAimingPitch(&laim);
|
|
||||||
|
|
||||||
mousex = mousey = mlooky = 0;
|
mousex = mousey = mlooky = 0;
|
||||||
|
|
||||||
|
|
@ -2880,10 +2898,6 @@ static ticcmd_t *P_CameraCmd(camera_t *cam)
|
||||||
else if (cmd->forwardmove < -MAXPLMOVE)
|
else if (cmd->forwardmove < -MAXPLMOVE)
|
||||||
cmd->forwardmove = -MAXPLMOVE;
|
cmd->forwardmove = -MAXPLMOVE;
|
||||||
|
|
||||||
lang += (cmd->turning << TICCMD_REDUCE);
|
|
||||||
|
|
||||||
democam.localangle = lang;
|
|
||||||
democam.localaiming = laim;
|
|
||||||
democam.turnheld = th;
|
democam.turnheld = th;
|
||||||
democam.keyboardlook = kbl;
|
democam.keyboardlook = kbl;
|
||||||
|
|
||||||
|
|
@ -2905,8 +2919,14 @@ void P_DemoCameraMovement(camera_t *cam)
|
||||||
// first off we need to get button input
|
// first off we need to get button input
|
||||||
cmd = P_CameraCmd(cam);
|
cmd = P_CameraCmd(cam);
|
||||||
|
|
||||||
cam->aiming = cmd->aiming<<FRACBITS;
|
cam->aiming += cmd->aiming << TICCMD_REDUCE;
|
||||||
//cam->angle = cmd->angleturn << 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:
|
// camera movement:
|
||||||
|
|
||||||
|
|
@ -4234,12 +4254,6 @@ void P_PlayerThink(player_t *player)
|
||||||
|
|
||||||
cmd = &player->cmd;
|
cmd = &player->cmd;
|
||||||
|
|
||||||
{
|
|
||||||
angle_t angleChange = K_GetKartTurnValue(player, cmd->turning) << TICCMD_REDUCE;
|
|
||||||
player->angleturn += angleChange;
|
|
||||||
P_SetLocalAngle(player, P_GetLocalAngle(player) + angleChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
// Save the dir the player is holding
|
// Save the dir the player is holding
|
||||||
// to allow items to be thrown forward or backward.
|
// 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;
|
angle = angle & ~UINT16_MAX;
|
||||||
|
|
||||||
for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
|
for (i = 0; i <= splitscreen; i++)
|
||||||
{
|
{
|
||||||
if (player == &players[g_localplayers[i]])
|
if (player == &players[g_localplayers[i]])
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue