Merge branch 'fastfall-with-speed' into 'master'

Scale fast fall momentum with speed at time of trigger

See merge request KartKrew/Kart!1047
This commit is contained in:
Gunla 2023-03-18 23:00:06 +00:00
commit b8f3c7e357
6 changed files with 21 additions and 1 deletions

View file

@ -524,6 +524,7 @@ struct player_t
UINT8 spindashboost; // Spindash release boost timer
fixed_t fastfall; // Fast fall momentum
fixed_t fastfallBase; // Fast fall base speed multiplier
UINT8 numboosts; // Count of how many boosts are being stacked, for after image spawning
fixed_t boostpower; // Base boost value, for offroad

View file

@ -9946,6 +9946,13 @@ static void K_KartSpindash(player_t *player)
// Update fastfall.
player->fastfall = player->mo->momz;
player->spindash = 0;
if (player->fastfallBase == 0)
{
// Factors 3D momentum.
player->fastfallBase = FixedHypot(player->speed, player->mo->momz);
}
return;
}
else if (player->fastfall != 0)
@ -10057,6 +10064,7 @@ boolean K_FastFallBounce(player_t *player)
player->mo->momz = bounce * P_MobjFlip(player->mo);
player->fastfall = 0;
player->fastfallBase = 0;
return true;
}

View file

@ -282,6 +282,8 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->spindashboost);
else if (fastcmp(field,"fastfall"))
lua_pushfixed(L, plr->fastfall);
else if (fastcmp(field,"fastfallBase"))
lua_pushfixed(L, plr->fastfallBase);
else if (fastcmp(field,"numboosts"))
lua_pushinteger(L, plr->numboosts);
else if (fastcmp(field,"boostpower"))
@ -664,6 +666,8 @@ static int player_set(lua_State *L)
plr->spindashboost = luaL_checkinteger(L, 3);
else if (fastcmp(field,"fastfall"))
plr->fastfall = luaL_checkfixed(L, 3);
else if (fastcmp(field,"fastfallBase"))
plr->fastfallBase = luaL_checkfixed(L, 3);
else if (fastcmp(field,"numboosts"))
plr->numboosts = luaL_checkinteger(L, 3);
else if (fastcmp(field,"boostpower"))

View file

@ -1148,7 +1148,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
else if (mo->player->fastfall != 0)
{
// Fast falling
gravityadd *= 4;
const fixed_t unit = 64 * mapobjectscale;
const fixed_t mult = 3*FRACUNIT + (3 * FixedDiv(mo->player->fastfallBase, unit));
gravityadd = FixedMul(gravityadd, mult);
}
}
else

View file

@ -311,6 +311,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].spindashboost);
WRITEFIXED(save->p, players[i].fastfall);
WRITEFIXED(save->p, players[i].fastfallBase);
WRITEUINT8(save->p, players[i].numboosts);
WRITEFIXED(save->p, players[i].boostpower);
@ -686,6 +687,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].spindashboost = READUINT8(save->p);
players[i].fastfall = READFIXED(save->p);
players[i].fastfallBase = READFIXED(save->p);
players[i].numboosts = READUINT8(save->p);
players[i].boostpower = READFIXED(save->p);

View file

@ -482,6 +482,7 @@ void P_ResetPlayer(player_t *player)
player->trickpanel = 0;
player->glanceDir = 0;
player->fastfall = 0;
player->fastfallBase = 0;
if (player->mo != NULL && P_MobjWasRemoved(player->mo) == false)
{