diff --git a/src/d_player.h b/src/d_player.h index 29640e1c9..1196387fc 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -684,8 +684,8 @@ struct player_t UINT8 ringvolume; // When consuming lots of rings, lower the sound a little. UINT8 ringtransparency; // When consuming lots of rings, fade out the rings again. - tic_t airdroptime; // Tracks how long the player has been in airdrop. In light airdrop, handles the delay before it kicks in. - tic_t airdropbuffer; // Time during which heavy air drop will instantly trigger upon going airborne. + INT32 airdroptime; // Tracks how long the player has been in airdrop. In light airdrop, handles the delay before it kicks in. + INT32 airdropbuffer; // Time during which heavy air drop will instantly trigger upon going airborne. p_airdropflags_t airdropflags; // Airdrop-exclusive bitflags. mobj_t *shieldtracer; // Blankart: Shield mobj diff --git a/src/k_kart.c b/src/k_kart.c index f6e413a7f..b451ccbdf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6978,7 +6978,7 @@ static void K_SpawnFallLines(player_t *player, boolean ringdrop) static void K_AirDrop(player_t *player, ticcmd_t *cmd) { - const tic_t airbrakedelay = TICRATE/3; + const INT32 airbrakedelay = TICRATE/3; if (player->airdropbuffer > 0) { @@ -7030,7 +7030,7 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd) } if (player->airdroptime > 1) { - player->dropdash = TICRATE/4 + min(TICRATE, ((FixedDiv(player->airdroptime, TICRATE) * TICRATE) / FRACUNIT)); + player->startboost = TICRATE/4 + min(TICRATE, ((FixedDiv(player->airdroptime, TICRATE) * TICRATE) / FRACUNIT)); // Take off! S_StartSound(player->mo, sfx_shrpgo); @@ -7097,20 +7097,21 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd) player->mo->momz -= FixedMul(2*gravity, mapobjectscale)*P_MobjFlip(player->mo); } - player->airdroptime++; if (player->karthud[khud_heavydropcam] < TICRATE) player->karthud[khud_heavydropcam]++; } else if (player->airdropflags & PAF_AIRDROP_LIGHT) { - K_SpawnFallLines(player, false); if (player->airdroptime >= airbrakedelay) { player->mo->momz -= FixedMul(gravity, mapobjectscale)*P_MobjFlip(player->mo); + K_SpawnFallLines(player, false); K_SpawnAirdropTrail(player); } - player->airdroptime++; } + + if (K_AirDropActive() && !P_IsObjectOnGround(player->mo)) + player->airdroptime++; } // Returns the bumpspark value as an enum.