Fix bouncy floors not killing airdrop and make generalized air drop kill function (and expose it to lua)
This commit is contained in:
parent
9ca702dce8
commit
87122216c5
5 changed files with 36 additions and 6 deletions
13
src/k_kart.c
13
src/k_kart.c
|
|
@ -7155,6 +7155,19 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
player->airdroppredelay++;
|
||||
}
|
||||
|
||||
void K_KillAirDrop(player_t *player, p_airdropflags_t airdropflags)
|
||||
{
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (player->airdropflags & airdropflags)
|
||||
{
|
||||
player->airdroptime = 0;
|
||||
player->airdroppredelay = 0;
|
||||
player->airdropflags &= ~PAF_AIRDROP_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
// Returns the bumpspark value as an enum.
|
||||
INT32 K_GetBumpSpark(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -414,6 +414,8 @@ typedef enum
|
|||
AIRDROP_FUSION,
|
||||
} airdroptype_t;
|
||||
|
||||
void K_KillAirDrop(player_t *player, p_airdropflags_t airdropflags);
|
||||
|
||||
boolean K_NullDriftTiltEnabled(void);
|
||||
|
||||
#define RECOVERYDASHADD (TICRATE/2)
|
||||
|
|
|
|||
|
|
@ -4375,6 +4375,18 @@ static int lib_kSafeRespawnPositionEx(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kKillAirDrop(lua_State *L)
|
||||
{
|
||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||
p_airdropflags_t airdropflags = luaL_checkinteger(L, 2);
|
||||
|
||||
if (!player)
|
||||
return LUA_ErrInvalid(L, "player_t");
|
||||
|
||||
K_KillAirDrop(player, airdropflags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Checks if Rings are applicable.
|
||||
static int lib_kRingsActive(lua_State *L)
|
||||
{
|
||||
|
|
@ -5770,6 +5782,7 @@ static luaL_Reg lib[] = {
|
|||
{"K_SetHyudoroCooldown",lib_kSetHyuCountdown},
|
||||
{"K_SafeRespawnPosition",lib_kSafeRespawnPosition},
|
||||
{"K_SafeRespawnPositionEx",lib_kSafeRespawnPositionEx},
|
||||
{"K_KillAirDrop", lib_kKillAirDrop},
|
||||
|
||||
{"K_GetCollideAngle",lib_kGetCollideAngle},
|
||||
|
||||
|
|
|
|||
|
|
@ -3406,12 +3406,7 @@ void P_MobjCheckWater(mobj_t *mobj)
|
|||
mobj->momz = FixedMul(mobj->momz, FixedDiv(2*FRACUNIT, 5*FRACUNIT)); // kill momentum significantly, to make the goo feel thick.
|
||||
|
||||
// Kill heavy airdrop too so you don't get softlocked.
|
||||
if (mobj->player && (mobj->player->airdropflags & PAF_AIRDROP_HEAVY))
|
||||
{
|
||||
mobj->player->airdroptime = 0;
|
||||
mobj->player->airdroppredelay = 0;
|
||||
mobj->player->airdropflags &= ~PAF_AIRDROP_MASK;
|
||||
}
|
||||
K_KillAirDrop(mobj->player, PAF_AIRDROP_HEAVY);
|
||||
}
|
||||
else if (wasinwater && P_MobjFlip(mobj) * mobj->momz > 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1692,6 +1692,9 @@ static void P_CheckBouncySectors(player_t *player)
|
|||
{
|
||||
player->mo->momx = -FixedMul(player->mo->momx,rover->bouncestrength);
|
||||
player->mo->momy = -FixedMul(player->mo->momy,rover->bouncestrength);
|
||||
|
||||
// Kill heavy airdrop too so you don't get softlocked.
|
||||
K_KillAirDrop(player, PAF_AIRDROP_HEAVY);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1731,6 +1734,10 @@ static void P_CheckBouncySectors(player_t *player)
|
|||
player->mo->momx = momentum.x;
|
||||
player->mo->momy = momentum.y;
|
||||
player->mo->momz = momentum.z;
|
||||
|
||||
// Kill heavy airdrop too so you don't get softlocked.
|
||||
K_KillAirDrop(player, PAF_AIRDROP_HEAVY);
|
||||
|
||||
}
|
||||
goto bouncydone;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue