Introduce handleboost
Copying the system directly from RR 2.4
This commit is contained in:
parent
8cb3313752
commit
d031776ed3
8 changed files with 107 additions and 20 deletions
|
|
@ -484,48 +484,64 @@ consvar_t cv_kartstacking_sneaker_normalspeedboost = CVAR_INIT ("vanillaboost_sn
|
|||
consvar_t cv_kartstacking_sneaker_hardspeedboost = CVAR_INIT ("vanillaboost_sneaker_hardspeedboost", "0.2756", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_expertspeedboost = CVAR_INIT ("vanillaboost_sneaker_expertspeedboost", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_accelboost = CVAR_INIT ("vanillaboost_sneaker_accelboost", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_handleboost = CVAR_INIT ("vanillaboost_sneaker_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_maxgrade = CVAR_INIT ("vanillaboost_sneaker_maxgrade", "3", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_Natural, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_stackable = CVAR_INIT ("vanillaboost_sneaker_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
consvar_t cv_kartstacking_panel_separate = CVAR_INIT ("vanillaboost_panel_separate", "Off", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
consvar_t cv_kartstacking_panel_maxgrade = CVAR_INIT ("vanillaboost_panel_maxgrade", "2", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_Natural, NULL);
|
||||
|
||||
//
|
||||
// Invincibility
|
||||
//
|
||||
|
||||
// Classic boosts
|
||||
consvar_t cv_kartstacking_invincibility_classicspeedboost = CVAR_INIT ("vanillaboost_invincibility_classicspeedboost", "0.375", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_classicaccelboost = CVAR_INIT ("vanillaboost_invincibility_classicaccelboost", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_classichandleboost = CVAR_INIT ("vanillaboost_invincibility_classichandleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
// Alternate boosts
|
||||
consvar_t cv_kartstacking_invincibility_alternatespeedboost = CVAR_INIT ("vanillaboost_invincibility_alternatespeedboost", "0.68", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_alternateaccelboost = CVAR_INIT ("vanillaboost_invincibility_alternateaccelboost", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_alternatehandleboost = CVAR_INIT ("vanillaboost_invincibility_alternatehandleboost", "1.5", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_stackable = CVAR_INIT ("vanillaboost_invincibility_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_grow_speedboost = CVAR_INIT ("vanillaboost_grow_speedboost", "0.2", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_grow_accelboost = CVAR_INIT ("vanillaboost_grow_accelboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_grow_handleboost = CVAR_INIT ("vanillaboost_grow_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_grow_stackable = CVAR_INIT ("vanillaboost_grow_stackable", "Off", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_altshrink_speedboost = CVAR_INIT ("vanillaboost_altshrink_speedboost", "0.50", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_altshrink_accelboost = CVAR_INIT ("vanillaboost_altshrink_accelboost", "0.15", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_altshrink_handleboost = CVAR_INIT ("vanillaboost_altshrink_handleboost", "2.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_altshrink_stackable = CVAR_INIT ("vanillaboost_altshrink_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_bubble_speedboost = CVAR_INIT ("vanillaboost_bubble_speedboost", "0.35", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_bubble_accelboost = CVAR_INIT ("vanillaboost_bubble_accelboost", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_bubble_handleboost = CVAR_INIT ("vanillaboost_bubble_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_bubble_stackable = CVAR_INIT ("vanillaboost_bubble_stackable", "Off", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_flame_speedval = CVAR_INIT ("vanillaboost_flame_speedval", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_flame_accelboost = CVAR_INIT ("vanillaboost_flame_accelboost", "6.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_flame_handleboost = CVAR_INIT ("vanillaboost_flame_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_flame_stackable = CVAR_INIT ("vanillaboost_flame_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_start_speedboost = CVAR_INIT ("vanillaboost_start_speedboost", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_start_accelboost = CVAR_INIT ("vanillaboost_start_accelboost", "6.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_start_handleboost = CVAR_INIT ("vanillaboost_start_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_start_stackable = CVAR_INIT ("vanillaboost_start_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_walltransfer_speedboost = CVAR_INIT ("vanillaboost_walltransfer_speedboost", "0.10", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_walltransfer_accelboost = CVAR_INIT ("vanillaboost_walltransfer_accelboost", "5.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_walltransfer_handleboost = CVAR_INIT ("vanillaboost_walltransfer_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_walltransfer_stackable = CVAR_INIT ("vanillaboost_walltransfer_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_drift_speedboost = CVAR_INIT ("vanillaboost_drift_speedboost", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_drift_accelboost = CVAR_INIT ("vanillaboost_drift_accelboost", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_drift_handleboost = CVAR_INIT ("vanillaboost_drift_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_drift_stackable = CVAR_INIT ("vanillaboost_drift_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_ring_speedboost = CVAR_INIT ("vanillaboost_ring_speedboost", "0.2", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_ring_accelboost = CVAR_INIT ("vanillaboost_ring_accelboost", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_ring_handleboost = CVAR_INIT ("vanillaboost_ring_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_ring_stackable = CVAR_INIT ("vanillaboost_ring_stackable", "On", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_slope_decay = CVAR_INIT ("vanillaboost_slope_decay", "0.004", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
|
|
@ -594,6 +610,8 @@ consvar_t cv_kartitempush = CVAR_INIT ("kartitempush", "Off", CV_NETVAR|CV_CALL|
|
|||
|
||||
consvar_t cv_kartforcelegacyodds = CVAR_INIT ("kartforcelegacyodds", "Off", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_handleboostslip = CVAR_INIT ("karthandleboostsliptide", "On", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
||||
#define ANTIBUMP_MAX (UINT32_MAX / TICRATE)
|
||||
static CV_PossibleValue_t antibump_cons_t[] = {{0, "MIN"}, {ANTIBUMP_MAX, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_kartantibump = CVAR_INIT ("kartantibump", "0", CV_NETVAR|CV_CALL|CV_NOINIT, antibump_cons_t, KartAntiBump_OnChange);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ extern consvar_t cv_kartstacking_sneaker_normalspeedboost;
|
|||
extern consvar_t cv_kartstacking_sneaker_hardspeedboost;
|
||||
extern consvar_t cv_kartstacking_sneaker_expertspeedboost;
|
||||
extern consvar_t cv_kartstacking_sneaker_accelboost;
|
||||
extern consvar_t cv_kartstacking_sneaker_handleboost;
|
||||
extern consvar_t cv_kartstacking_sneaker_maxgrade;
|
||||
extern consvar_t cv_kartstacking_sneaker_stackable;
|
||||
extern consvar_t cv_kartstacking_panel_separate;
|
||||
|
|
@ -119,41 +120,51 @@ extern consvar_t cv_kartstacking_panel_maxgrade;
|
|||
|
||||
extern consvar_t cv_kartstacking_invincibility_classicspeedboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_classicaccelboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_classichandleboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_alternatespeedboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_alternateaccelboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_alternatehandleboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_flame_speedval;
|
||||
extern consvar_t cv_kartstacking_flame_accelboost;
|
||||
extern consvar_t cv_kartstacking_flame_handleboost;
|
||||
extern consvar_t cv_kartstacking_flame_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_grow_speedboost;
|
||||
extern consvar_t cv_kartstacking_grow_accelboost;
|
||||
extern consvar_t cv_kartstacking_grow_handleboost;
|
||||
extern consvar_t cv_kartstacking_grow_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_bubble_speedboost;
|
||||
extern consvar_t cv_kartstacking_bubble_accelboost;
|
||||
extern consvar_t cv_kartstacking_bubble_handleboost;
|
||||
extern consvar_t cv_kartstacking_bubble_stackable;
|
||||
|
||||
extern consvar_t cv_kartaltshrinktime;
|
||||
extern consvar_t cv_kartstacking_altshrink_speedboost;
|
||||
extern consvar_t cv_kartstacking_altshrink_accelboost;
|
||||
extern consvar_t cv_kartstacking_altshrink_handleboost;
|
||||
extern consvar_t cv_kartstacking_altshrink_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_start_speedboost;
|
||||
extern consvar_t cv_kartstacking_start_accelboost;
|
||||
extern consvar_t cv_kartstacking_start_handleboost;
|
||||
extern consvar_t cv_kartstacking_start_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_walltransfer_speedboost;
|
||||
extern consvar_t cv_kartstacking_walltransfer_accelboost;
|
||||
extern consvar_t cv_kartstacking_walltransfer_handleboost;
|
||||
extern consvar_t cv_kartstacking_walltransfer_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_drift_speedboost;
|
||||
extern consvar_t cv_kartstacking_drift_accelboost;
|
||||
extern consvar_t cv_kartstacking_drift_handleboost;
|
||||
extern consvar_t cv_kartstacking_drift_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_ring_speedboost;
|
||||
extern consvar_t cv_kartstacking_ring_accelboost;
|
||||
extern consvar_t cv_kartstacking_ring_handleboost;
|
||||
extern consvar_t cv_kartstacking_ring_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_slope_decay;
|
||||
|
|
@ -216,6 +227,8 @@ extern consvar_t cv_kartantibump;
|
|||
|
||||
extern consvar_t cv_kartforcelegacyodds;
|
||||
|
||||
extern consvar_t cv_handleboostslip;
|
||||
|
||||
extern consvar_t cv_kartoddsdist;
|
||||
extern consvar_t cv_kartlegacyoddsdist;
|
||||
extern consvar_t cv_kartspbdist;
|
||||
|
|
|
|||
|
|
@ -419,6 +419,7 @@ struct boostinfo_t {
|
|||
fixed_t stackspeedboost;
|
||||
fixed_t nonstackspeedboost;
|
||||
fixed_t accelboost;
|
||||
fixed_t handleboost;
|
||||
UINT8 grade;
|
||||
};
|
||||
|
||||
|
|
|
|||
66
src/k_kart.c
66
src/k_kart.c
|
|
@ -2557,12 +2557,21 @@ fixed_t K_GetInvincibilityAccel(UINT16 time)
|
|||
return Easing_OutCubic(t, 0, INVINACCELBOOSTALT);
|
||||
}
|
||||
|
||||
fixed_t K_GetInvincibilityHandling(UINT16 time)
|
||||
{
|
||||
if (!K_IsKartItemAlternate(KITEM_INVINCIBILITY))
|
||||
return INVINHANDLEBOOSTCLS;
|
||||
|
||||
fixed_t t = min(FRACUNIT, K_InvincibilityGradient(time));
|
||||
return Easing_OutCubic(t, 0, INVINHANDLEBOOSTALT);
|
||||
}
|
||||
|
||||
static fixed_t diminish(fixed_t speedboost)
|
||||
{
|
||||
return FixedSqrt(speedboost + DIMINISHPARAM) - FixedSqrt(DIMINISHPARAM);
|
||||
}
|
||||
|
||||
void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, boolean stack, boolean visible)
|
||||
void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, fixed_t handleboost, boolean stack, boolean visible)
|
||||
{
|
||||
if (stack && K_StackingActive())
|
||||
{
|
||||
|
|
@ -2580,6 +2589,8 @@ void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, boolean
|
|||
player->boostinfo.accelboost = max(player->boostinfo.accelboost, accelboost);
|
||||
}
|
||||
|
||||
player->boostinfo.handleboost = max(player->boostinfo.handleboost, handleboost);
|
||||
|
||||
if (visible)
|
||||
{
|
||||
player->boostinfo.grade = CLAMP(player->boostinfo.grade+1, 0, stackingactive ? UINT8_MAX : 1);
|
||||
|
|
@ -2591,6 +2602,7 @@ void K_ClearBoost(player_t *player)
|
|||
player->boostinfo.stackspeedboost = 0;
|
||||
player->boostinfo.nonstackspeedboost = 0;
|
||||
player->boostinfo.accelboost = 0;
|
||||
player->boostinfo.handleboost = 0;
|
||||
player->boostinfo.grade = 0;
|
||||
}
|
||||
|
||||
|
|
@ -2733,12 +2745,12 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
|
||||
for (i = 0; i < numsneakers; i++)
|
||||
{
|
||||
K_DoBoost(player, sneakerspeedboost, ACCELSTACK ? 0 : SNEAKERACCELBOOST, SNEAKERSTACKABLE, SNEAKERSTACKABLE); // + ???% top speed, + 800% acceleration
|
||||
K_DoBoost(player, sneakerspeedboost, ACCELSTACK ? 0 : SNEAKERACCELBOOST, SNEAKERHANDLEBOOST, SNEAKERSTACKABLE, SNEAKERSTACKABLE); // + ???% top speed, + 800% acceleration
|
||||
}
|
||||
|
||||
if (ACCELSTACK)
|
||||
{
|
||||
K_DoBoost(player, 0, SNEAKERACCELBOOST, true, false); // + 800% acceleration
|
||||
K_DoBoost(player, 0, SNEAKERACCELBOOST, 0, true, false); // + 800% acceleration
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2746,15 +2758,16 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
{
|
||||
fixed_t invspeedboost = K_GetInvincibilitySpeed(player->invincibilitytimer);
|
||||
fixed_t invaccelboost = K_GetInvincibilityAccel(player->invincibilitytimer);
|
||||
fixed_t invhandleboost = K_GetInvincibilityHandling(player->invincibilitytimer);
|
||||
|
||||
// Legacy: + 37.5% top speed, + 300% acceleration
|
||||
// Alternative: + ???% top speed, + ???% acceleration
|
||||
K_DoBoost(player, invspeedboost, invaccelboost, INVINSTACKABLE, INVINSTACKABLE);
|
||||
K_DoBoost(player, invspeedboost, invaccelboost, invhandleboost, INVINSTACKABLE, INVINSTACKABLE);
|
||||
}
|
||||
|
||||
if (player->growshrinktimer > 0) // Grow
|
||||
{
|
||||
K_DoBoost(player, GROWSPEEDBOOST, GROWACCELBOOST, GROWSTACKABLE, GROWSTACKABLE); // + 20% top speed, + 0% acceleration
|
||||
K_DoBoost(player, GROWSPEEDBOOST, GROWACCELBOOST, GROWHANDLEBOOST, GROWSTACKABLE, GROWSTACKABLE); // + 20% top speed, + 0% acceleration
|
||||
}
|
||||
|
||||
if (K_IsAltShrunk(player)) // Alt. Shrink
|
||||
|
|
@ -2764,43 +2777,43 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
|
||||
shrinkspeed = FixedMul(shrinkspeed, boostpower);
|
||||
|
||||
K_DoBoost(player, shrinkspeed, shrinkaccel, SHRINKSTACKABLE, SHRINKSTACKABLE); // + 50% top speed, + 15% acceleration
|
||||
K_DoBoost(player, shrinkspeed, shrinkaccel, SHRINKHANDLEBOOST, SHRINKSTACKABLE, SHRINKSTACKABLE); // + 50% top speed, + 15% acceleration
|
||||
}
|
||||
|
||||
if (player->bubbleboost) // Bubble Shield popping boost
|
||||
{
|
||||
K_DoBoost(player, BUBBLESPEEDBOOST, BUBBLEACCELBOOST, BUBBLESTACKABLE, BUBBLESTACKABLE); // + 35% top speed, + 800% acceleration
|
||||
K_DoBoost(player, BUBBLESPEEDBOOST, BUBBLEACCELBOOST, BUBBLEHANDLEBOOST, BUBBLESTACKABLE, BUBBLESTACKABLE); // + 35% top speed, + 800% acceleration
|
||||
}
|
||||
|
||||
if (player->flamestore) // Flame Shield dash
|
||||
{
|
||||
fixed_t dash = K_FlameShieldDashVar(player->flamedash);
|
||||
K_DoBoost(player, FLAMESPEEDVAL + dash, FLAMEACCELBOOST, FLAMESTACKABLE, FLAMESTACKABLE);
|
||||
K_DoBoost(player, FLAMESPEEDVAL + dash, FLAMEACCELBOOST, FLAMEHANDLEBOOST, FLAMESTACKABLE, FLAMESTACKABLE);
|
||||
}
|
||||
|
||||
if (player->startboost) // Startup Boost
|
||||
{
|
||||
K_DoBoost(player, STARTSPEEDBOOST, STARTACCELBOOST, STARTSTACKABLE, STARTSTACKABLE); // + 25% top speed, + 600% acceleration
|
||||
K_DoBoost(player, STARTSPEEDBOOST, STARTACCELBOOST, STARTHANDLEBOOST, STARTSTACKABLE, STARTSTACKABLE); // + 25% top speed, + 600% acceleration
|
||||
}
|
||||
|
||||
if (player->walltransferboost) // Wall Transfer Boost
|
||||
{
|
||||
K_DoBoost(player, WALLTRANSFERSPEEDBOOST, WALLTRANSFERACCELBOOST, WALLTRANSFERSTACKABLE, WALLTRANSFERSTACKABLE); // + 10% top speed, + 500% acceleration
|
||||
K_DoBoost(player, WALLTRANSFERSPEEDBOOST, WALLTRANSFERACCELBOOST, WALLTRANSFERHANDLEBOOST, WALLTRANSFERSTACKABLE, WALLTRANSFERSTACKABLE); // + 10% top speed, + 500% acceleration
|
||||
}
|
||||
|
||||
if (player->driftboost) // Drift Boost
|
||||
{
|
||||
K_DoBoost(player, DRIFTSPEEDBOOST, DRIFTACCELBOOST, DRIFTSTACKABLE, DRIFTSTACKABLE); // + 25% top speed, + 400% acceleration
|
||||
K_DoBoost(player, DRIFTSPEEDBOOST, DRIFTACCELBOOST, DRIFTHANDLEBOOST, DRIFTSTACKABLE, DRIFTSTACKABLE); // + 25% top speed, + 400% acceleration
|
||||
}
|
||||
|
||||
if (player->ringboost) // Ring Boost
|
||||
{
|
||||
K_DoBoost(player, RINGSPEEDBOOST, RINGACCELBOOST, RINGSTACKABLE, RINGSTACKABLE); // + 20% top speed, + 400% acceleration
|
||||
K_DoBoost(player, RINGSPEEDBOOST, RINGACCELBOOST, RINGHANDLEBOOST, RINGSTACKABLE, RINGSTACKABLE); // + 20% top speed, + 400% acceleration
|
||||
}
|
||||
|
||||
if (player->slopeboost || player->slopeaccel)
|
||||
{
|
||||
K_DoBoost(player, player->slopeboost, player->slopeaccel, SLOPESTACKABLE, false); // + ???% top speed, + 300% acceleration
|
||||
K_DoBoost(player, player->slopeboost, player->slopeaccel, 0, SLOPESTACKABLE, false); // + ???% top speed, + 300% acceleration
|
||||
}
|
||||
|
||||
// This should always remain the last boost before drafting
|
||||
|
|
@ -8960,12 +8973,17 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
|
|||
return turnvalue;
|
||||
}
|
||||
|
||||
if (player->boostinfo.handleboost > 0)
|
||||
{
|
||||
turnvalue = FixedMul(turnvalue, FRACUNIT + player->boostinfo.handleboost);
|
||||
}
|
||||
|
||||
turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning
|
||||
|
||||
if (K_SlipdashActive() && K_Sliptiding(player)) // slight handling boost based on weight
|
||||
turnvalue = FixedMul(turnvalue, FRACUNIT + (10 - player->kartweight)*FRACUNIT/48);
|
||||
|
||||
if (player->invincibilitytimer || player->sneakertimer || player->bubbleboost ||
|
||||
if (player->sneakertimer || player->bubbleboost ||
|
||||
player->growshrinktimer > 0 || K_IsAltShrunk(player))
|
||||
{
|
||||
turnvalue = FixedMul(turnvalue, FixedDiv(5 * FRACUNIT, 4 * FRACUNIT));
|
||||
|
|
@ -9109,6 +9127,22 @@ boolean K_InterceptArrowBullet(player_t *player)
|
|||
return ((player->invincibilitytimer && !K_IsKartItemAlternate(KITEM_INVINCIBILITY)) || (player->growshrinktimer > 0) || (player->flamestore));
|
||||
}
|
||||
|
||||
// 1.25 fracunits; the (hardcoded) handleboost of a Sneaker.
|
||||
#define HANDLEBOOSTTHRESHOLD (5 * FRACUNIT / 4)
|
||||
|
||||
// Generalized sliptide conditions.
|
||||
static boolean K_OtherSliptideCondition(player_t* player)
|
||||
{
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
return (
|
||||
K_AltInvinSliptideCondition(player) || K_AltShrinkSliptideCondition(player) ||
|
||||
(cv_handleboostslip.value && (player->boostinfo.handleboost >= HANDLEBOOSTTHRESHOLD)));
|
||||
}
|
||||
|
||||
#undef HANDLEBOOSTTHRESHOLD
|
||||
|
||||
static void K_HandleAirDriftDrag(player_t *player, boolean onground)
|
||||
{
|
||||
if (onground && player->airdriftspeed > 0)
|
||||
|
|
@ -9346,7 +9380,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->pflags &= ~(PF_BRAKEDRIFT|PF_GETSPARKS);
|
||||
}
|
||||
|
||||
if ( (!(player->sneakertimer || player->flamestore || player->bubbleboost || K_AltInvinSliptideCondition(player) || K_AltShrinkSliptideCondition(player)))
|
||||
if ( (!(player->sneakertimer || player->flamestore || player->bubbleboost || K_OtherSliptideCondition(player)))
|
||||
|| (!player->cmd.turning)
|
||||
|| (!player->aizdriftstrat)
|
||||
|| (player->cmd.turning > 0) != (player->aizdriftstrat > 0))
|
||||
|
|
@ -9433,7 +9467,7 @@ static void K_KartSlipdash(player_t *player, boolean onground)
|
|||
S_StopSoundByID(player->mo, sfx_cdfm17);
|
||||
S_StartSoundAtVolume(player->mo, player->slipdashcharge > FRACUNIT/3 ? sfx_cdfm62 : sfx_s23c, driftbonus ? 200 : 255);
|
||||
P_Thrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, false, false), 2*player->slipdashcharge/3));
|
||||
K_DoBoost(player, (2*player->slipdashcharge/3)/2, 0, false, false);
|
||||
K_DoBoost(player, (2*player->slipdashcharge/3)/2, 0, 0, false, false);
|
||||
|
||||
for (i = -1; i <= 1; i += 2)
|
||||
{
|
||||
|
|
|
|||
13
src/k_kart.h
13
src/k_kart.h
|
|
@ -108,6 +108,7 @@ extern vector3_t clusterpoint, clusterdtf;
|
|||
#define HARDSNEAKERSPEEDBOOST CV_Get(&cv_kartstacking_sneaker_hardspeedboost)
|
||||
#define EXPERTSNEAKERSPEEDBOOST CV_Get(&cv_kartstacking_sneaker_expertspeedboost)
|
||||
#define SNEAKERACCELBOOST CV_Get(&cv_kartstacking_sneaker_accelboost)
|
||||
#define SNEAKERHANDLEBOOST CV_Get(&cv_kartstacking_sneaker_handleboost)
|
||||
#define MAXSNEAKERSTACK CV_Get(&cv_kartstacking_sneaker_maxgrade)
|
||||
#define SNEAKERSTACKABLE CV_Get(&cv_kartstacking_sneaker_stackable)
|
||||
#define SEPARATEPANELS CV_Get(&cv_kartstacking_panel_separate)
|
||||
|
|
@ -115,41 +116,51 @@ extern vector3_t clusterpoint, clusterdtf;
|
|||
|
||||
#define INVINSPEEDBOOSTCLS CV_Get(&cv_kartstacking_invincibility_classicspeedboost)
|
||||
#define INVINACCELBOOSTCLS CV_Get(&cv_kartstacking_invincibility_classicaccelboost)
|
||||
#define INVINHANDLEBOOSTCLS CV_Get(&cv_kartstacking_invincibility_classichandleboost)
|
||||
#define INVINSPEEDBOOSTALT CV_Get(&cv_kartstacking_invincibility_alternatespeedboost)
|
||||
#define INVINACCELBOOSTALT CV_Get(&cv_kartstacking_invincibility_alternateaccelboost)
|
||||
#define INVINHANDLEBOOSTALT CV_Get(&cv_kartstacking_invincibility_alternatehandleboost)
|
||||
#define INVINSTACKABLE CV_Get(&cv_kartstacking_invincibility_stackable)
|
||||
|
||||
#define GROWSPEEDBOOST CV_Get(&cv_kartstacking_grow_speedboost)
|
||||
#define GROWACCELBOOST CV_Get(&cv_kartstacking_grow_accelboost)
|
||||
#define GROWHANDLEBOOST CV_Get(&cv_kartstacking_grow_handleboost)
|
||||
#define GROWSTACKABLE CV_Get(&cv_kartstacking_grow_stackable)
|
||||
|
||||
#define BUBBLESPEEDBOOST CV_Get(&cv_kartstacking_bubble_speedboost)
|
||||
#define BUBBLEACCELBOOST CV_Get(&cv_kartstacking_bubble_accelboost)
|
||||
#define BUBBLEHANDLEBOOST CV_Get(&cv_kartstacking_bubble_handleboost)
|
||||
#define BUBBLESTACKABLE CV_Get(&cv_kartstacking_bubble_stackable)
|
||||
|
||||
#define FLAMESPEEDVAL CV_Get(&cv_kartstacking_flame_speedval)
|
||||
#define FLAMEACCELBOOST CV_Get(&cv_kartstacking_flame_accelboost)
|
||||
#define FLAMEHANDLEBOOST CV_Get(&cv_kartstacking_flame_handleboost)
|
||||
#define FLAMESTACKABLE CV_Get(&cv_kartstacking_flame_stackable)
|
||||
|
||||
#define ALTSHRINKTIME CV_Get(&cv_kartaltshrinktime)
|
||||
#define SHRINKSPEEDBOOST CV_Get(&cv_kartstacking_altshrink_speedboost)
|
||||
#define SHRINKACCELBOOST CV_Get(&cv_kartstacking_altshrink_accelboost)
|
||||
#define SHRINKHANDLEBOOST CV_Get(&cv_kartstacking_altshrink_handleboost)
|
||||
#define SHRINKSTACKABLE CV_Get(&cv_kartstacking_altshrink_stackable)
|
||||
|
||||
#define STARTSPEEDBOOST CV_Get(&cv_kartstacking_start_speedboost)
|
||||
#define STARTACCELBOOST CV_Get(&cv_kartstacking_start_accelboost)
|
||||
#define STARTHANDLEBOOST CV_Get(&cv_kartstacking_start_handleboost)
|
||||
#define STARTSTACKABLE CV_Get(&cv_kartstacking_start_stackable)
|
||||
|
||||
#define WALLTRANSFERSPEEDBOOST CV_Get(&cv_kartstacking_walltransfer_speedboost)
|
||||
#define WALLTRANSFERACCELBOOST CV_Get(&cv_kartstacking_walltransfer_accelboost)
|
||||
#define WALLTRANSFERHANDLEBOOST CV_Get(&cv_kartstacking_walltransfer_handleboost)
|
||||
#define WALLTRANSFERSTACKABLE CV_Get(&cv_kartstacking_walltransfer_stackable)
|
||||
|
||||
#define DRIFTSPEEDBOOST CV_Get(&cv_kartstacking_drift_speedboost)
|
||||
#define DRIFTACCELBOOST CV_Get(&cv_kartstacking_drift_accelboost)
|
||||
#define DRIFTHANDLEBOOST CV_Get(&cv_kartstacking_drift_handleboost)
|
||||
#define DRIFTSTACKABLE CV_Get(&cv_kartstacking_drift_stackable)
|
||||
|
||||
#define RINGSPEEDBOOST CV_Get(&cv_kartstacking_ring_speedboost)
|
||||
#define RINGACCELBOOST CV_Get(&cv_kartstacking_ring_accelboost)
|
||||
#define RINGHANDLEBOOST CV_Get(&cv_kartstacking_ring_handleboost)
|
||||
#define RINGSTACKABLE CV_Get(&cv_kartstacking_ring_stackable)
|
||||
|
||||
#define SLOPEDECAY CV_Get(&cv_kartstacking_slope_decay)
|
||||
|
|
@ -371,7 +382,7 @@ boolean K_UsingPatchedMap(void);
|
|||
INT32 K_CheckpointThreshold(boolean roundup);
|
||||
|
||||
fixed_t K_BoostRescale(fixed_t value,fixed_t oldmin,fixed_t oldmax,fixed_t newmin,fixed_t newmax);
|
||||
void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, boolean stack, boolean visible);
|
||||
void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, fixed_t handleboost, boolean stack, boolean visible);
|
||||
void K_ClearBoost(player_t *player);
|
||||
|
||||
boolean K_NotFreePlay(void);
|
||||
|
|
|
|||
|
|
@ -4423,13 +4423,14 @@ static int lib_kDoBoost(lua_State *L)
|
|||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||
fixed_t speedboost = luaL_checkfixed(L, 2);
|
||||
fixed_t accelboost = luaL_checkfixed(L, 3);
|
||||
boolean stacking = lua_optboolean(L, 4);
|
||||
boolean visible = lua_isnoneornil(L, 5) ? true : luaL_checkboolean(L, 5);
|
||||
fixed_t handleboost = luaL_checkfixed(L, 4);
|
||||
boolean stacking = lua_optboolean(L, 5);
|
||||
boolean visible = lua_isnoneornil(L, 6) ? true : luaL_checkboolean(L, 6);
|
||||
|
||||
//HUDSAFE
|
||||
if (!player)
|
||||
return LUA_ErrInvalid(L, "player_t");
|
||||
K_DoBoost(player, speedboost, accelboost, stacking, visible);
|
||||
K_DoBoost(player, speedboost, accelboost, handleboost, stacking, visible);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2920,6 +2920,7 @@ enum boostinfo
|
|||
boostinfo_stackspeedboost = 0,
|
||||
boostinfo_nonstackspeedboost,
|
||||
boostinfo_accelboost,
|
||||
boostinfo_handleboost,
|
||||
boostinfo_grade,
|
||||
};
|
||||
|
||||
|
|
@ -2927,6 +2928,7 @@ static const char *const boostinfo_opt[] = {
|
|||
"stackspeedboost",
|
||||
"nonstackspeedboost",
|
||||
"accelboost",
|
||||
"handleboost",
|
||||
"grade",
|
||||
NULL,
|
||||
};
|
||||
|
|
@ -2950,6 +2952,9 @@ static int boostinfo_get(lua_State *L)
|
|||
case boostinfo_accelboost:
|
||||
lua_pushfixed(L, boostinfo->accelboost);
|
||||
break;
|
||||
case boostinfo_handleboost:
|
||||
lua_pushfixed(L, boostinfo->handleboost);
|
||||
break;
|
||||
case boostinfo_grade:
|
||||
lua_pushinteger(L, boostinfo->grade);
|
||||
break;
|
||||
|
|
@ -2984,6 +2989,9 @@ static int boostinfo_set(lua_State *L)
|
|||
case boostinfo_accelboost:
|
||||
boostinfo->accelboost = luaL_checkfixed(L, 3);
|
||||
break;
|
||||
case boostinfo_handleboost:
|
||||
boostinfo->handleboost = luaL_checkfixed(L, 3);
|
||||
break;
|
||||
case boostinfo_grade:
|
||||
boostinfo->grade = (UINT8)luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -639,6 +639,7 @@ static void P_NetSyncPlayers(savebuffer_t *save)
|
|||
SYNC(players[i].boostinfo.stackspeedboost);
|
||||
SYNC(players[i].boostinfo.nonstackspeedboost);
|
||||
SYNC(players[i].boostinfo.accelboost);
|
||||
SYNC(players[i].boostinfo.handleboost);
|
||||
SYNC(players[i].boostinfo.grade);
|
||||
|
||||
SYNC(players[i].tripwireState);
|
||||
|
|
|
|||
Loading…
Reference in a new issue