From 8a91fdfa4347ebeca57a4beb58da348de032c158 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Tue, 21 Apr 2026 13:17:30 -0400 Subject: [PATCH] fix mobjscale issues with bumpy road effect and tune it to shake faster --- src/d_player.h | 2 ++ src/k_kart.c | 21 ++++++++++----------- src/p_saveg.c | 2 ++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index a3d431976..933cfdd42 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -629,6 +629,8 @@ struct player_t fixed_t karttilt; // Generalized sliptide-like kart tilting as an angle_t (Can be toggled off by clients) fixed_t karttiltmomentum; // angular velocity in rad/sec + SINT8 bumpyroadside; // last side lifted up by bumpy road + // (Delay-drift) - Delay in tics before the final drift angle is determined. // Potentially influenced by player lag. tic_t driftdelay; diff --git a/src/k_kart.c b/src/k_kart.c index 222aaecf1..a955567df 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9435,7 +9435,7 @@ static void K_HandleAirDriftDrag(player_t *player, boolean onground) /// @brief simulates applying a torque by applying a force at an offset from the player's centre, is a purely visual effect /// @param player player to apply angular momentum to /// @param distance distance from player centre to apply torque to ("radius") -/// @param force linear force to apply to the player to turn into angular velocity, + is CCW. Don't mobjscale if your distance is already scaled +/// @param force linear force to apply to the player to turn into angular velocity, + is CCW. void K_AddTiltImpulse(player_t *player, fixed_t distance, fixed_t force) { fixed_t angularvelocity = FixedDiv(force, abs(distance)); @@ -12037,17 +12037,16 @@ void K_KartAttractHomingAttack(player_t *player) // Visual effect for bumpy road sector. void K_KartPlayerBumpyRoad(player_t *player) { - if (player->speed > 4*mapobjectscale && abs(player->karttilt) < FRACUNIT/2) + if (player->speed > 4*mapobjectscale && abs(player->karttilt) < FRACUNIT/4) { - fixed_t baseimpulse = 9*FRACUNIT * (player->karttiltmomentum ? intsign(player->karttiltmomentum) : 1); - fixed_t rate = CLAMP(FixedDiv(player->speed, K_GetKartSpeed(player, false, false)), 6*FRACUNIT/10, FRACUNIT); - if (abs(player->karttiltmomentum) < abs(baseimpulse)) - { - player->karttilt = (FRACUNIT/2) * (player->karttiltmomentum ? intsign(player->karttiltmomentum) : 1); - player->karttiltmomentum = 0; - K_AddTiltImpulse(player, player->mo->height/2, baseimpulse); - S_StartSoundAtVolume(player->mo, sfx_s3k56, CLAMP((200*rate)/FRACUNIT, 0, 200)); - } + fixed_t baseimpulse; + fixed_t rate = CLAMP(FixedDiv(player->speed, K_GetKartSpeed(player, false, false)), 8*FRACUNIT/10, 11*FRACUNIT/10); + player->bumpyroadside = (player->bumpyroadside ? -player->bumpyroadside : 1); + baseimpulse = FixedMul(4*mapobjectscale * player->bumpyroadside, rate); + + player->karttilt = FixedMul((3*FRACUNIT/2) * player->bumpyroadside, rate); + K_AddTiltImpulse(player, player->mo->height/2, baseimpulse); + S_StartSoundAtVolume(player->mo, sfx_s3k56, CLAMP((180*rate)/FRACUNIT, 0, 180)); } } diff --git a/src/p_saveg.c b/src/p_saveg.c index da7feec47..aec9b4cdd 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -863,6 +863,8 @@ static void P_NetSyncPlayers(savebuffer_t *save) SYNC(players[i].itemusecooldownmax); P_SyncMem(save, players[i].public_key, PUBKEYLENGTH); + + SYNC(players[i].bumpyroadside); } TracyCZoneEnd(__zone); }