fix mobjscale issues with bumpy road effect

and tune it to shake faster
This commit is contained in:
minenice55 2026-04-21 13:17:30 -04:00
parent 7b3c198aca
commit 8a91fdfa43
3 changed files with 14 additions and 11 deletions

View file

@ -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;

View file

@ -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));
}
}

View file

@ -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);
}