mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
changes to the delay, boost when doing upwards trick
This commit is contained in:
parent
dcee9269dd
commit
29e11a0378
5 changed files with 51 additions and 6 deletions
|
|
@ -241,6 +241,7 @@ typedef enum
|
|||
// CONSTANTS FOR TRICK PANELS
|
||||
#define TRICKMOMZRAMP (30)
|
||||
#define TRICKLAG (9)
|
||||
#define TRICKDELAY (TICRATE/2)
|
||||
|
||||
#define TUMBLEBOUNCES 3
|
||||
|
||||
|
|
@ -450,9 +451,14 @@ typedef struct player_s
|
|||
UINT8 jawztargetdelay; // (0 to 5) - Delay for Jawz target switching, to make it less twitchy
|
||||
|
||||
UINT8 trickpanel; // Trick panel state
|
||||
tic_t tricktime; // Increases while you're tricking. You can't input any trick until it's reached a certain threshold
|
||||
fixed_t trickmomx;
|
||||
fixed_t trickmomy;
|
||||
fixed_t trickmomz;
|
||||
fixed_t trickboostpower; // Save the rough speed multiplier. Used for upwards tricks.
|
||||
tic_t trickboostdecay; // used to know how long you've waited
|
||||
tic_t trickboost; // Trick boost. This one is weird and has variable speed. Dear god.
|
||||
|
||||
|
||||
UINT32 roundscore; // battle score this round
|
||||
UINT8 emeralds;
|
||||
|
|
|
|||
39
src/k_kart.c
39
src/k_kart.c
|
|
@ -2546,6 +2546,11 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
if (player->trickboost) // Trick pannel up-boost
|
||||
{
|
||||
ADDBOOST(player->trickboostpower, 5*FRACUNIT, 0); // <trickboostpower>% speed, 500% accel, 0% handling
|
||||
}
|
||||
|
||||
if (player->ringboost) // Ring Boost
|
||||
{
|
||||
ADDBOOST(FRACUNIT/5, 4*FRACUNIT, 0); // + 20% top speed, + 400% acceleration, +0% handling
|
||||
|
|
@ -4868,7 +4873,10 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
|
|||
thrust = FixedMul(thrust, 9*FRACUNIT/8);
|
||||
}
|
||||
|
||||
mo->player->trickmomx = mo->player->trickmomy = mo->player->trickmomz = 0; // Reset post-hitlag momentums.
|
||||
mo->player->trickmomx = mo->player->trickmomy = mo->player->trickmomz = mo->player->tricktime = 0; // Reset post-hitlag momentums and timer
|
||||
// Setup the boost for potential upwards trick, at worse, make it your regular max speed.
|
||||
mo->player->trickboostpower = max(FixedDiv(mo->player->speed, K_GetKartSpeed(mo->player, false)) - FRACUNIT, 0);
|
||||
//CONS_Printf("Got boost: %d%\n", mo->player->trickboostpower*100 / FRACUNIT);
|
||||
}
|
||||
|
||||
mo->momz = FixedMul(thrust, vscale);
|
||||
|
|
@ -6284,7 +6292,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
// Speed lines
|
||||
if (player->sneakertimer || player->ringboost
|
||||
|| player->driftboost || player->startboost
|
||||
|| player->eggmanexplode)
|
||||
|| player->eggmanexplode || player->trickboost)
|
||||
{
|
||||
if (player->invincibilitytimer)
|
||||
K_SpawnInvincibilitySpeedLines(player->mo);
|
||||
|
|
@ -6525,6 +6533,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
}
|
||||
|
||||
if (player->trickboost)
|
||||
player->trickboost--;
|
||||
|
||||
if (player->flamedash)
|
||||
player->flamedash--;
|
||||
|
||||
|
|
@ -8787,6 +8798,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
fixed_t basespeed = P_AproxDistance(player->mo->momx, player->mo->momy); // at WORSE, keep your normal speed when tricking.
|
||||
fixed_t speed = FixedMul(speedmult, P_AproxDistance(player->mo->momx, player->mo->momy));
|
||||
|
||||
if (!cmd->turning && !player->throwdir) // increment this counter while your inputs are neutral
|
||||
player->tricktime++;
|
||||
|
||||
// debug shit
|
||||
//CONS_Printf("%d\n", player->mo->momz / mapobjectscale);
|
||||
if (momz < -10*FRACUNIT) // :youfuckedup:
|
||||
|
|
@ -8858,6 +8872,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
relative = false;
|
||||
}
|
||||
|
||||
// Calculate speed boost decay:
|
||||
// Base speed boost duration is 35 tics.
|
||||
// At most, lose 3/4th of your boost.
|
||||
player->trickboostdecay = min(TICRATE*3/4, abs(momz/FRACUNIT));
|
||||
//CONS_Printf("decay: %d\n", player->trickboostdecay);
|
||||
|
||||
P_SetObjectMomZ(player->mo, 48*FRACUNIT, relative);
|
||||
|
||||
player->trickmomx = player->mo->momx;
|
||||
|
|
@ -8866,7 +8886,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
P_InstaThrust(player->mo, 0, 0); // Sike, you have no speed :)
|
||||
player->mo->momz = 0;
|
||||
|
||||
player->trickpanel = 3;
|
||||
player->trickpanel = 4;
|
||||
player->mo->hitlag = TRICKLAG;
|
||||
}
|
||||
}
|
||||
|
|
@ -8882,8 +8902,19 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
}
|
||||
|
||||
else if (player->trickpanel == 4 && P_IsObjectOnGround(player->mo)) // Upwards trick landed!
|
||||
{
|
||||
//CONS_Printf("apply boost\n");
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
K_SpawnDashDustRelease(player);
|
||||
player->trickboost = TICRATE - player->trickboostdecay;
|
||||
|
||||
player->trickpanel = player->trickboostdecay = 0;
|
||||
}
|
||||
|
||||
// Wait until we let go off the control stick to remove the delay
|
||||
if ((player->pflags & PF_TRICKDELAY) && !player->throwdir && !cmd->turning)
|
||||
// buttons must be neutral after the initial trick delay. This prevents weirdness where slight nudges after blast off would send you flying.
|
||||
if ((player->pflags & PF_TRICKDELAY) && !player->throwdir && !cmd->turning && (player->tricktime >= TRICKDELAY))
|
||||
{
|
||||
player->pflags &= ~PF_TRICKDELAY;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1109,7 +1109,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
gravityadd = (4*gravityadd)/3;
|
||||
}
|
||||
|
||||
if (mo->player->trickpanel == 2 || mo->player->trickpanel == 3)
|
||||
if (mo->player->trickpanel >= 2)
|
||||
{
|
||||
gravityadd = (5*gravityadd)/2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -305,9 +305,13 @@ static void P_NetArchivePlayers(void)
|
|||
WRITEUINT8(save_p, players[i].jawztargetdelay);
|
||||
|
||||
WRITEUINT8(save_p, players[i].trickpanel);
|
||||
WRITEUINT32(save_p, players[i].tricktime);
|
||||
WRITEUINT32(save_p, players[i].trickmomx);
|
||||
WRITEUINT32(save_p, players[i].trickmomy);
|
||||
WRITEUINT32(save_p, players[i].trickmomz);
|
||||
WRITEUINT32(save_p, players[i].trickboostpower);
|
||||
WRITEUINT32(save_p, players[i].trickboostdecay);
|
||||
WRITEUINT32(save_p, players[i].trickboost);
|
||||
|
||||
WRITEUINT32(save_p, players[i].roundscore);
|
||||
WRITEUINT8(save_p, players[i].emeralds);
|
||||
|
|
@ -557,9 +561,13 @@ static void P_NetUnArchivePlayers(void)
|
|||
players[i].jawztargetdelay = READUINT8(save_p);
|
||||
|
||||
players[i].trickpanel = READUINT8(save_p);
|
||||
players[i].tricktime = (tic_t)READUINT32(save_p);
|
||||
players[i].trickmomx = READUINT32(save_p);
|
||||
players[i].trickmomy = READUINT32(save_p);
|
||||
players[i].trickmomz = READUINT32(save_p);
|
||||
players[i].trickboostpower = READUINT32(save_p);
|
||||
players[i].trickboostdecay = (tic_t)READUINT32(save_p);
|
||||
players[i].trickboost = (tic_t)READUINT32(save_p);
|
||||
|
||||
players[i].roundscore = READUINT32(save_p);
|
||||
players[i].emeralds = READUINT8(save_p);
|
||||
|
|
|
|||
|
|
@ -2030,7 +2030,7 @@ void P_MovePlayer(player_t *player)
|
|||
{
|
||||
player->drawangle += ANGLE_22h;
|
||||
}
|
||||
else if (player->trickpanel == 3)
|
||||
else if (player->trickpanel >= 3)
|
||||
{
|
||||
player->drawangle -= ANGLE_22h;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue