From 672c4fb76396a2d7db4a2eab5c1e0322ef39c4d3 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 25 Sep 2020 02:06:37 -0400 Subject: [PATCH] Make aiming relative too --- src/g_game.c | 26 +++++++------------ src/g_game.h | 2 +- src/k_kart.c | 8 +++--- src/p_saveg.c | 4 +-- src/p_spec.h | 5 +--- src/p_user.c | 72 ++++++++++++++++++++++++++++++--------------------- 6 files changed, 61 insertions(+), 56 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 551cbfbe9..b15013ded 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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; diff --git a/src/g_game.h b/src/g_game.h index 00ffbf134..13376cd20 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -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 diff --git a/src/k_kart.c b/src/k_kart.c index 2fb56ca2d..f8ae89914 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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 { diff --git a/src/p_saveg.c b/src/p_saveg.c index 974ff4b96..7379a02c8 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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) diff --git a/src/p_spec.h b/src/p_spec.h index bddb4584c..9dccc0d8a 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -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); diff --git a/src/p_user.c b/src/p_user.c index ef9713808..8f02af6c1 100644 --- a/src/p_user.c +++ b/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 // @@ -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<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]]) {