start spindash/ssmt

This commit is contained in:
minenice55 2026-01-27 02:07:47 -05:00
parent ce74d4012d
commit 0beaae5f55
6 changed files with 71 additions and 3 deletions

View file

@ -549,6 +549,10 @@ consvar_t cv_kartstacking_ring_accelboost = CVAR_INIT ("vanillaboost_ring_accelb
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_ssmt_speedboost = CVAR_INIT ("vanillaboost_ssmt_speedboost", "0.1", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_ssmt_accelboost = CVAR_INIT ("vanillaboost_ssmt_accelboost", "65535.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_ssmt_handleboost = CVAR_INIT ("vanillaboost_ssmt_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, 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);
consvar_t cv_kartstacking_slope_brakemod = CVAR_INIT ("vanillaboost_slope_brakemod", "0.01", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_speedboost_max = CVAR_INIT ("vanillaboost_slope_speedboost_max", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);

View file

@ -167,6 +167,10 @@ 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_ssmt_speedboost;
extern consvar_t cv_kartstacking_ssmt_accelboost;
extern consvar_t cv_kartstacking_ssmt_handleboost;
extern consvar_t cv_kartstacking_slope_decay;
extern consvar_t cv_kartstacking_slope_brakemod;
extern consvar_t cv_kartstacking_slope_speedboost_max;

View file

@ -103,8 +103,9 @@ typedef enum
PF_SHRINKACTIVE = 1<<26, // "Shrink me" cheat is in effect. (Can't be disabled mid-race)
PF_JUSTFLIPPED = 1<<27, // Just got flipped over, handle the bump interaction.
PF_CHARGINGSSMT = 1<<28, // Player was charging SSMT last tick
// up to 1<<28 is free
PF_USEDOWN = 1<<29, // For lua compat, don't use!
PF_ATTACKDOWN = 1<<30, // For lua compat, don't use!
PF_SLIDING = 1<<31, // For lua compat, don't use!
@ -598,6 +599,9 @@ struct player_t
// Potentially influenced by player lag.
tic_t driftdelay;
tic_t ssmtcharge; // Time spent charging SSMT
UINT16 ssmtboost; // SSMT boost timer (weak boost that ignores offroad)
fixed_t spinoutrot; // When a player spins out, this value increments modulus 360.
SINT8 aizdriftstrat; // (-1 to 1) - Let go of your drift while boosting? Helper for the SICK STRATZ (sliptiding!) you have just unlocked
@ -619,6 +623,7 @@ struct player_t
fixed_t prevspeedboost; // Max speed boost value from the last frame
fixed_t accelboost; // Boost value smoothing for acceleration
fixed_t handleboost; // Boost value smoothing for handling
fixed_t forcedtopspeed; // Force this top speed while charging SSMT
angle_t boostangle; // angle set when not spun out OR boosted to determine what direction you should keep going at if you're spun out and boosted.
boostinfo_t boostinfo; // Stores values used for setting speed and accel boosts.
UINT8 numsneakers; // Number of stacked sneakers

View file

@ -2832,6 +2832,11 @@ static void K_GetKartBoostPower(player_t *player)
K_DoBoost(player, RINGSPEEDBOOST, RINGACCELBOOST, RINGHANDLEBOOST, RINGSTACKABLE, RINGSTACKABLE); // + 20% top speed, + 400% acceleration
}
if (player->ssmtboost) // Ring Boost
{
K_DoBoost(player, SSMTSPEEDBOOST, SSMTACCELBOOST, SSMTHANDLEBOOST, false, true); // + 10% top speed, + ♾️% acceleration
}
if (player->slopeboost || player->slopeaccel)
{
K_DoBoost(player, player->slopeboost, player->slopeaccel, 0, SLOPESTACKABLE, false); // + ???% top speed, + 300% acceleration
@ -2964,6 +2969,9 @@ fixed_t K_GetKartSpeed(const player_t *player, boolean doboostpower, boolean dor
boolean karmabomb = ((gametyperules & GTR_BUMPERS) && player->bumper <= 0);
fixed_t finalspeed;
if (player->forcedtopspeed > 0)
return FixedMul(player->forcedtopspeed, player->mo->scale);
if (doboostpower && !player->pogospring && !P_IsObjectOnGround(player->mo) && (player->airdriftspeed == 0))
return (75*mapobjectscale); // air speed cap
@ -3093,7 +3101,7 @@ SINT8 K_GetForwardMove(const player_t *player)
player->flipovertimer) // pw_introcam?
{
forwardmove = 0;
if (player->sneakertimer)
if (player->sneakertimer || player->ssmtboost)
forwardmove = MAXPLMOVE;
}
@ -7041,6 +7049,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
// Speed lines
if (player->sneakertimer || player->ringboost
|| player->driftboost || player->startboost
|| player->ssmtboost
|| player->walltransferboost
|| player->bubbleboost)
{
@ -7239,6 +7248,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->realsneakertimer)
player->realsneakertimer--;
if (player->ssmtboost)
player->ssmtboost--;
if (player->sneakertimer && player->wipeoutslow > 0 && player->wipeoutslow < wipeoutslowtime+1)
player->wipeoutslow = wipeoutslowtime+1;
@ -9611,6 +9623,41 @@ static void K_KartSlipdash(player_t *player, boolean onground)
}
}
static void K_StandStillMiniTurbo(player_t *player, boolean onground)
{
if (player->speed <= 8*player->mo->scale && onground)
{
if (player->cmd.buttons & BT_ACCELERATE|BT_BRAKE)
{
player->pflags |= PF_CHARGINGSSMT;
player->forcedtopspeed = 8*FRACUNIT;
player->ssmtcharge += 1;
K_SpawnDashDustRelease(player, true);
if (player->ssmtcharge >= 3*TICRATE/2)
{
K_SpawnBoostTrail(player);
}
return;
}
else if (player->pflags & PF_CHARGINGSSMT)
{
player->pflags &= ~PF_CHARGINGSSMT;
player->forcedtopspeed = 0;
if (player->ssmtcharge >= 3*TICRATE/2)
{
player->ssmtboost = TICRATE;
}
player->ssmtcharge = 0;
return;
}
}
player->pflags &= ~PF_CHARGINGSSMT;
player->forcedtopspeed = 0;
player->ssmtcharge = 0;
}
INT32 K_GetDriftAngleOffset(player_t *player)
{
INT32 a = 0;
@ -11058,10 +11105,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
K_KartSlipdash(player, onground);
K_StandStillMiniTurbo(player, onground);
// Quick Turning
// You can't turn your kart when you're not moving.
// So now it's time to burn some rubber!
if (player->speed < 2 && leveltime > starttime && player->cmd.buttons & BT_ACCELERATE && player->cmd.buttons & BT_BRAKE && player->cmd.turning != 0)
if (player->speed < 2 && leveltime > starttime && (player->cmd.buttons & BT_ACCELERATE|BT_BRAKE) && player->cmd.turning != 0)
{
if (leveltime % 8 == 0)
S_StartSound(player->mo, sfx_s224);

View file

@ -163,6 +163,10 @@ extern vector3_t clusterpoint, clusterdtf;
#define RINGHANDLEBOOST CV_Get(&cv_kartstacking_ring_handleboost)
#define RINGSTACKABLE CV_Get(&cv_kartstacking_ring_stackable)
#define SSMTSPEEDBOOST CV_Get(&cv_kartstacking_ssmt_speedboost)
#define SSMTACCELBOOST CV_Get(&cv_kartstacking_ssmt_accelboost)
#define SSMTHANDLEBOOST CV_Get(&cv_kartstacking_ssmt_handleboost)
#define SLOPEDECAY CV_Get(&cv_kartstacking_slope_decay)
#define SLOPEBRAKEMOD CV_Get(&cv_kartstacking_slope_brakemod)
#define SLOPESPEEDBOOSTMAX CV_Get(&cv_kartstacking_slope_speedboost_max)

View file

@ -2337,6 +2337,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
}
player->driftboost = 0;
player->ssmtboost = 0;
player->ssmtcharge = 0;
player->airdriftspeed = 0;
player->ringboost = 0;
player->glanceDir = 0;