From 778de306c5a91f1f8534d2763cbbadc51f8611c3 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 23 Apr 2023 14:51:29 -0400 Subject: [PATCH] Make camera follow platform momentum --- src/p_local.h | 1 + src/p_mobj.c | 4 ++-- src/p_user.c | 16 +++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/p_local.h b/src/p_local.h index b3c291b05..b8fe9f013 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -125,6 +125,7 @@ struct camera_t // Momentums, used to update position. fixed_t momx, momy, momz; + fixed_t pmomz; // SRB2Kart: camera pans while drifting fixed_t pan; diff --git a/src/p_mobj.c b/src/p_mobj.c index 5a5ec0fbd..d09acba2c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3721,10 +3721,10 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled thiscam->floorz = g_tm.floorz; thiscam->ceilingz = g_tm.ceilingz; - if (thiscam->momz || player->mo->pmomz) + if (thiscam->momz || thiscam->pmomz) { // adjust height - thiscam->z += thiscam->momz + player->mo->pmomz; + thiscam->z += thiscam->momz + thiscam->pmomz; } if (thiscam->ceilingz - thiscam->z < thiscam->height diff --git a/src/p_user.c b/src/p_user.c index f94f0d17e..f5a740e10 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2440,9 +2440,6 @@ void P_MovePlayer(player_t *player) // Look for Quicksand! if (CheckForQuicksand) P_CheckQuicksand(player); - - if (P_IsObjectOnGround(player->mo)) - player->mo->pmomz = 0; } static void P_DoZoomTube(player_t *player) @@ -4575,9 +4572,6 @@ void P_PlayerAfterThink(player_t *player) player->mo->flags |= MF_NOGRAVITY; } - if (P_IsObjectOnGround(player->mo)) - player->mo->pmomz = 0; - K_KartPlayerAfterThink(player); if (player->followmobj && (player->spectator || player->mo->health <= 0 || player->followmobj->type != player->followitem)) @@ -4622,11 +4616,19 @@ void P_PlayerAfterThink(player_t *player) // so a lag value of 1 is exactly attached to the player. K_HandleFollower(player); - if (K_PlayerUsesBotMovement(player)) { K_UpdateBotGameplayVars(player); } + + if (thiscam) + { + // Store before it gets 0'd out + thiscam->pmomz = player->mo->pmomz; + } + + if (P_IsObjectOnGround(player->mo)) + player->mo->pmomz = 0; } void P_SetPlayerAngle(player_t *player, angle_t angle)