mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 04:21:47 +00:00
Add spindash launch, prevent charging while flashing
Used a timed buff instead of thrust due to friction issues, as a result I had to rebalance some values
This commit is contained in:
parent
4a9a33130a
commit
db230e4d3d
3 changed files with 57 additions and 15 deletions
|
|
@ -287,7 +287,9 @@ typedef enum
|
||||||
k_jmp, // In Mario Kart, letting go of the jump button stops the drift
|
k_jmp, // In Mario Kart, letting go of the jump button stops the drift
|
||||||
k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed
|
k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed
|
||||||
k_pogospring, // Pogo spring bounce effect
|
k_pogospring, // Pogo spring bounce effect
|
||||||
k_spindash, // Spindash charge
|
k_spindash, // Spindash charge timer
|
||||||
|
k_spindashspeed, // Spindash release speed
|
||||||
|
k_spindashboost, // Spindash release boost timer
|
||||||
k_waterskip, // Water skipping counter
|
k_waterskip, // Water skipping counter
|
||||||
k_dashpadcooldown, // Separate the vanilla SA-style dash pads from using pw_flashing
|
k_dashpadcooldown, // Separate the vanilla SA-style dash pads from using pw_flashing
|
||||||
k_numboosts, // Count of how many boosts are being stacked, for after image spawning
|
k_numboosts, // Count of how many boosts are being stacked, for after image spawning
|
||||||
|
|
|
||||||
|
|
@ -8838,6 +8838,8 @@ static const char *const KARTSTUFF_LIST[] = {
|
||||||
"OFFROAD",
|
"OFFROAD",
|
||||||
"POGOSPRING",
|
"POGOSPRING",
|
||||||
"SPINDASH",
|
"SPINDASH",
|
||||||
|
"SPINDASHSPEED",
|
||||||
|
"SPINDASHBOOST",
|
||||||
"WATERSKIP",
|
"WATERSKIP",
|
||||||
"DASHPADCOOLDOWN",
|
"DASHPADCOOLDOWN",
|
||||||
"NUMBOOSTS",
|
"NUMBOOSTS",
|
||||||
|
|
|
||||||
66
src/k_kart.c
66
src/k_kart.c
|
|
@ -2028,6 +2028,16 @@ static fixed_t K_FlameShieldDashVar(INT32 val)
|
||||||
return (3*FRACUNIT/4) + (((val * FRACUNIT) / TICRATE) / 2);
|
return (3*FRACUNIT/4) + (((val * FRACUNIT) / TICRATE) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static tic_t K_GetSpindashChargeTime(player_t *player)
|
||||||
|
{
|
||||||
|
return (player->kartspeed + 4) * (TICRATE/3); // more charge time for higher speed: Tails = 2s, Mighty = 3s, Fang = 4s
|
||||||
|
}
|
||||||
|
|
||||||
|
static fixed_t K_GetSpindashChargeSpeed(player_t *player)
|
||||||
|
{
|
||||||
|
return player->kartweight * (FRACUNIT/12); // more speed for higher weight: Tails = 116%, Fang = 142%, Mighty = 166%
|
||||||
|
}
|
||||||
|
|
||||||
// Light weights have stronger boost stacking -- aka, better metabolism than heavies XD
|
// Light weights have stronger boost stacking -- aka, better metabolism than heavies XD
|
||||||
#define METABOLISM
|
#define METABOLISM
|
||||||
|
|
||||||
|
|
@ -2093,6 +2103,16 @@ static void K_GetKartBoostPower(player_t *player)
|
||||||
ADDBOOST(K_FlameShieldDashVar(player->kartstuff[k_flamedash]), 3*FRACUNIT); // + infinite top speed, + 300% acceleration
|
ADDBOOST(K_FlameShieldDashVar(player->kartstuff[k_flamedash]), 3*FRACUNIT); // + infinite top speed, + 300% acceleration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player->kartstuff[k_spindashboost]) // Spindash boost
|
||||||
|
{
|
||||||
|
const fixed_t MAXCHARGESPEED = K_GetSpindashChargeSpeed(player);
|
||||||
|
|
||||||
|
ADDBOOST(
|
||||||
|
FixedMul(player->kartstuff[k_spindashspeed], MAXCHARGESPEED),
|
||||||
|
(8*FRACUNIT) + (24*player->kartstuff[k_spindashspeed])
|
||||||
|
); // character & charge time dependent
|
||||||
|
}
|
||||||
|
|
||||||
if (player->kartstuff[k_startboost]) // Startup Boost
|
if (player->kartstuff[k_startboost]) // Startup Boost
|
||||||
{
|
{
|
||||||
ADDBOOST(FRACUNIT/4, 6*FRACUNIT); // + 25% top speed, + 600% acceleration
|
ADDBOOST(FRACUNIT/4, 6*FRACUNIT); // + 25% top speed, + 600% acceleration
|
||||||
|
|
@ -2267,7 +2287,7 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
||||||
// 0 with no gas, and
|
// 0 with no gas, and
|
||||||
// -25 when only braking.
|
// -25 when only braking.
|
||||||
|
|
||||||
if (player->kartstuff[k_sneakertimer])
|
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_spindashboost])
|
||||||
forwardmove = 50;
|
forwardmove = 50;
|
||||||
|
|
||||||
finalspeed *= forwardmove/25;
|
finalspeed *= forwardmove/25;
|
||||||
|
|
@ -5701,6 +5721,17 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
if (player->kartstuff[k_startboost])
|
if (player->kartstuff[k_startboost])
|
||||||
player->kartstuff[k_startboost]--;
|
player->kartstuff[k_startboost]--;
|
||||||
|
|
||||||
|
if (player->kartstuff[k_spindashboost])
|
||||||
|
{
|
||||||
|
player->kartstuff[k_spindashboost]--;
|
||||||
|
|
||||||
|
if (player->kartstuff[k_spindashboost] <= 0)
|
||||||
|
{
|
||||||
|
player->kartstuff[k_spindashspeed] = FRACUNIT;
|
||||||
|
player->kartstuff[k_spindashboost] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (player->kartstuff[k_invincibilitytimer])
|
if (player->kartstuff[k_invincibilitytimer])
|
||||||
player->kartstuff[k_invincibilitytimer]--;
|
player->kartstuff[k_invincibilitytimer]--;
|
||||||
|
|
||||||
|
|
@ -6825,20 +6856,11 @@ boolean K_PlayerEBrake(player_t *player)
|
||||||
&& !player->kartstuff[k_spinouttimer]
|
&& !player->kartstuff[k_spinouttimer]
|
||||||
&& !player->kartstuff[k_boostcharge]
|
&& !player->kartstuff[k_boostcharge]
|
||||||
&& !(player->kartstuff[k_spindash] < 0)
|
&& !(player->kartstuff[k_spindash] < 0)
|
||||||
|
&& !player->kartstuff[k_spindashboost]
|
||||||
&& !player->powers[pw_nocontrol]
|
&& !player->powers[pw_nocontrol]
|
||||||
&& leveltime > starttime;
|
&& leveltime > starttime;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tic_t K_GetSpindashChargeTime(player_t *player)
|
|
||||||
{
|
|
||||||
return (player->kartspeed + 4)*TICRATE/3; // more charge time for higher speed: Tails = 2s, Mighty = 3s, Fang = 4s
|
|
||||||
}
|
|
||||||
|
|
||||||
static fixed_t K_GetSpindashChargeSpeed(player_t *player)
|
|
||||||
{
|
|
||||||
return FixedMul(FRACUNIT + (player->kartweight - 5)*FRACUNIT/12, K_GetKartSpeed(player, false)); // more speed for higher weight: Tails = 75%, Fang = 100%, Mighty = 125%
|
|
||||||
}
|
|
||||||
|
|
||||||
static void K_KartSpindash(player_t *player)
|
static void K_KartSpindash(player_t *player)
|
||||||
{
|
{
|
||||||
ticcmd_t *cmd = &player->cmd;
|
ticcmd_t *cmd = &player->cmd;
|
||||||
|
|
@ -6850,10 +6872,9 @@ static void K_KartSpindash(player_t *player)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->speed < 6*mapobjectscale)
|
if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0)
|
||||||
{
|
{
|
||||||
const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
|
const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
|
||||||
const fixed_t MAXCHARGESPEED = K_GetSpindashChargeSpeed(player);
|
|
||||||
|
|
||||||
if (cmd->driftturn != 0 && leveltime % 8 == 0)
|
if (cmd->driftturn != 0 && leveltime % 8 == 0)
|
||||||
S_StartSound(player->mo, sfx_ruburn);
|
S_StartSound(player->mo, sfx_ruburn);
|
||||||
|
|
@ -6885,7 +6906,24 @@ static void K_KartSpindash(player_t *player)
|
||||||
}
|
}
|
||||||
else if (player->kartstuff[k_spindash])
|
else if (player->kartstuff[k_spindash])
|
||||||
{
|
{
|
||||||
fixed_t speed = player->kartstuff[k_spindash]*MAXCHARGESPEED/MAXCHARGETIME;
|
player->kartstuff[k_spindashspeed] = (player->kartstuff[k_spindash] * FRACUNIT) / MAXCHARGETIME;
|
||||||
|
player->kartstuff[k_spindashboost] = TICRATE;
|
||||||
|
|
||||||
|
if (!player->kartstuff[k_tiregrease])
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
mobj_t *grease;
|
||||||
|
grease = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_TIREGREASE);
|
||||||
|
P_SetTarget(&grease->target, player->mo);
|
||||||
|
grease->angle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
||||||
|
grease->extravalue1 = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player->kartstuff[k_tiregrease] = 2*TICRATE;
|
||||||
|
|
||||||
player->kartstuff[k_spindash] = 0;
|
player->kartstuff[k_spindash] = 0;
|
||||||
S_StartSound(player->mo, sfx_s23c);
|
S_StartSound(player->mo, sfx_s23c);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue