Set wavedash power everywhere wavedashboost is directly awarded, increase threshold

This commit is contained in:
AJ Martinez 2024-03-01 17:18:42 -07:00
parent 19c62d37b9
commit af06d575fd
4 changed files with 16 additions and 17 deletions

View file

@ -945,7 +945,7 @@ struct player_t
UINT16 wavedash; // How long is our chained sliptide? Grant a proportional boost when it's over. UINT16 wavedash; // How long is our chained sliptide? Grant a proportional boost when it's over.
UINT8 wavedashdelay; // How long since the last sliptide? Only boost once you've been straightened out for a bit. UINT8 wavedashdelay; // How long since the last sliptide? Only boost once you've been straightened out for a bit.
UINT16 wavedashboost; // The actual boost granted from wavedash. UINT16 wavedashboost; // The actual boost granted from wavedash.
fixed_t lastwavedash; // Is this a bullshit "tap" wavedash? Weaken lower-charge wavedashes while keeping long sliptides fully rewarding. fixed_t wavedashpower; // Is this a bullshit "tap" wavedash? Weaken lower-charge wavedashes while keeping long sliptides fully rewarding.
UINT16 speedpunt; UINT16 speedpunt;

View file

@ -3324,12 +3324,12 @@ static void K_GetKartBoostPower(player_t *player)
// NB: This is intentionally under the 25% handleboost threshold required to initiate a sliptide // NB: This is intentionally under the 25% handleboost threshold required to initiate a sliptide
ADDBOOST( ADDBOOST(
Easing_InCubic( Easing_InCubic(
player->lastwavedash, player->wavedashpower,
0, 0,
8*FRACUNIT/10 8*FRACUNIT/10
), ),
Easing_InSine( Easing_InSine(
player->lastwavedash, player->wavedashpower,
0, 0,
4*FRACUNIT 4*FRACUNIT
), ),
@ -4425,7 +4425,7 @@ void K_UpdateStumbleIndicator(player_t *player)
} }
} }
#define MIN_WAVEDASH_CHARGE ((7*TICRATE/16)*9) #define MIN_WAVEDASH_CHARGE ((11*TICRATE/16)*9)
static boolean K_IsLosingWavedash(player_t *player) static boolean K_IsLosingWavedash(player_t *player)
{ {
@ -8675,12 +8675,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
player->wavedashboost--; player->wavedashboost--;
} }
if (player->wavedashboost == 0 || player->lastwavedash > FRACUNIT) if (player->wavedashboost == 0 || player->wavedashpower > FRACUNIT)
{ {
player->lastwavedash = FRACUNIT; player->wavedashpower = FRACUNIT; // Safety
// lastwavedash is for nerfing tap wavedashes: when other parts of the code
// want to award wavedashboost, let them do that without unexpected side
// effects based on the last recorded wavedash. They can set this on their own!
} }
if (player->speedpunt) if (player->speedpunt)
@ -10398,6 +10395,7 @@ static void K_KartDrift(player_t *player, boolean onground)
{ {
player->driftboost += 20; player->driftboost += 20;
player->wavedashboost += 10; player->wavedashboost += 10;
player->wavedashpower = FRACUNIT;
P_Thrust(player->mo, pushdir, player->speed / 2); P_Thrust(player->mo, pushdir, player->speed / 2);
S_StartSound(player->mo, sfx_gshba); S_StartSound(player->mo, sfx_gshba);
player->trickcharge = 0; player->trickcharge = 0;
@ -10657,12 +10655,12 @@ static void K_KartDrift(player_t *player, boolean onground)
player->wavedashboost += yourBoost; player->wavedashboost += yourBoost;
// Set power of the resulting boost. // Set power of the resulting boost.
player->lastwavedash = min(FRACUNIT, FRACUNIT * player->wavedash / MIN_WAVEDASH_CHARGE); player->wavedashpower = min(FRACUNIT, FRACUNIT * player->wavedash / MIN_WAVEDASH_CHARGE);
// Scale boost sound to power. // Scale boost sound to power.
S_StartSoundAtVolume(player->mo, sfx_waved3, S_StartSoundAtVolume(player->mo, sfx_waved3,
Easing_InSine( Easing_InSine(
player->lastwavedash, player->wavedashpower,
120, 120,
255 255
) )
@ -12563,6 +12561,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{ {
P_InstaThrust(player->mo, player->mo->angle, player->speed + (80 * mapobjectscale)); P_InstaThrust(player->mo, player->mo->angle, player->speed + (80 * mapobjectscale));
player->wavedashboost += TICRATE; // Just for keeping speed briefly vs. tripwire etc. player->wavedashboost += TICRATE; // Just for keeping speed briefly vs. tripwire etc.
player->wavedashpower = FRACUNIT;
// If this doesn't turn out to be reliable, I'll change it to directly set leniency or something. // If this doesn't turn out to be reliable, I'll change it to directly set leniency or something.
} }
K_PlayAttackTaunt(player->mo); K_PlayAttackTaunt(player->mo);

View file

@ -343,8 +343,8 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->wavedashdelay); lua_pushinteger(L, plr->wavedashdelay);
else if (fastcmp(field,"wavedashboost")) else if (fastcmp(field,"wavedashboost"))
lua_pushinteger(L, plr->wavedashboost); lua_pushinteger(L, plr->wavedashboost);
else if (fastcmp(field,"lastwavedash")) else if (fastcmp(field,"wavedashpower"))
lua_pushinteger(L, plr->lastwavedash); lua_pushinteger(L, plr->wavedashpower);
else if (fastcmp(field,"speedpunt")) else if (fastcmp(field,"speedpunt"))
lua_pushinteger(L, plr->speedpunt); lua_pushinteger(L, plr->speedpunt);
else if (fastcmp(field,"trickcharge")) else if (fastcmp(field,"trickcharge"))
@ -881,8 +881,8 @@ static int player_set(lua_State *L)
plr->wavedashdelay = luaL_checkinteger(L, 3); plr->wavedashdelay = luaL_checkinteger(L, 3);
else if (fastcmp(field,"wavedashboost")) else if (fastcmp(field,"wavedashboost"))
plr->wavedashboost = luaL_checkinteger(L, 3); plr->wavedashboost = luaL_checkinteger(L, 3);
else if (fastcmp(field,"lastwavedash")) else if (fastcmp(field,"wavedashpower"))
plr->lastwavedash = luaL_checkinteger(L, 3); plr->wavedashpower = luaL_checkinteger(L, 3);
else if (fastcmp(field,"speedpunt")) else if (fastcmp(field,"speedpunt"))
plr->speedpunt = luaL_checkinteger(L, 3); plr->speedpunt = luaL_checkinteger(L, 3);
else if (fastcmp(field,"trickcharge")) else if (fastcmp(field,"trickcharge"))

View file

@ -565,7 +565,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT16(save->p, players[i].wavedash); WRITEUINT16(save->p, players[i].wavedash);
WRITEUINT8(save->p, players[i].wavedashdelay); WRITEUINT8(save->p, players[i].wavedashdelay);
WRITEUINT16(save->p, players[i].wavedashboost); WRITEUINT16(save->p, players[i].wavedashboost);
WRITEFIXED(save->p, players[i].lastwavedash); WRITEFIXED(save->p, players[i].wavedashpower);
WRITEUINT16(save->p, players[i].speedpunt); WRITEUINT16(save->p, players[i].speedpunt);
WRITEUINT16(save->p, players[i].trickcharge); WRITEUINT16(save->p, players[i].trickcharge);
@ -1148,7 +1148,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].wavedash = READUINT16(save->p); players[i].wavedash = READUINT16(save->p);
players[i].wavedashdelay = READUINT8(save->p); players[i].wavedashdelay = READUINT8(save->p);
players[i].wavedashboost = READUINT16(save->p); players[i].wavedashboost = READUINT16(save->p);
players[i].lastwavedash = READFIXED(save->p); players[i].wavedashpower = READFIXED(save->p);
players[i].speedpunt = READUINT16(save->p); players[i].speedpunt = READUINT16(save->p);
players[i].trickcharge = READUINT16(save->p); players[i].trickcharge = READUINT16(save->p);