mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +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_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_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_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
|
||||
|
|
|
|||
|
|
@ -8838,6 +8838,8 @@ static const char *const KARTSTUFF_LIST[] = {
|
|||
"OFFROAD",
|
||||
"POGOSPRING",
|
||||
"SPINDASH",
|
||||
"SPINDASHSPEED",
|
||||
"SPINDASHBOOST",
|
||||
"WATERSKIP",
|
||||
"DASHPADCOOLDOWN",
|
||||
"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);
|
||||
}
|
||||
|
||||
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
|
||||
#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
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
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
|
||||
// -25 when only braking.
|
||||
|
||||
if (player->kartstuff[k_sneakertimer])
|
||||
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_spindashboost])
|
||||
forwardmove = 50;
|
||||
|
||||
finalspeed *= forwardmove/25;
|
||||
|
|
@ -5701,6 +5721,17 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
if (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])
|
||||
player->kartstuff[k_invincibilitytimer]--;
|
||||
|
||||
|
|
@ -6825,20 +6856,11 @@ boolean K_PlayerEBrake(player_t *player)
|
|||
&& !player->kartstuff[k_spinouttimer]
|
||||
&& !player->kartstuff[k_boostcharge]
|
||||
&& !(player->kartstuff[k_spindash] < 0)
|
||||
&& !player->kartstuff[k_spindashboost]
|
||||
&& !player->powers[pw_nocontrol]
|
||||
&& 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)
|
||||
{
|
||||
ticcmd_t *cmd = &player->cmd;
|
||||
|
|
@ -6850,10 +6872,9 @@ static void K_KartSpindash(player_t *player)
|
|||
return;
|
||||
}
|
||||
|
||||
if (player->speed < 6*mapobjectscale)
|
||||
if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0)
|
||||
{
|
||||
const tic_t MAXCHARGETIME = K_GetSpindashChargeTime(player);
|
||||
const fixed_t MAXCHARGESPEED = K_GetSpindashChargeSpeed(player);
|
||||
|
||||
if (cmd->driftturn != 0 && leveltime % 8 == 0)
|
||||
S_StartSound(player->mo, sfx_ruburn);
|
||||
|
|
@ -6885,7 +6906,24 @@ static void K_KartSpindash(player_t *player)
|
|||
}
|
||||
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;
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue