Crossing the finish line first before anyone else gives you a free rainbow boost

This commit is contained in:
Sally Coolatta 2020-07-24 21:41:41 -04:00
parent f61f9a010c
commit f0044e05c1
7 changed files with 26 additions and 1 deletions

View file

@ -534,6 +534,7 @@ extern tic_t hyubgone;
extern tic_t mapreset;
extern boolean thwompsactive;
extern SINT8 spbplace;
extern boolean rainbowstartavailable;
extern tic_t bombflashtimer; // Used to avoid causing seizures if multiple mines explode close to you :)
extern boolean legitimateexit;

View file

@ -289,6 +289,7 @@ tic_t hyubgone; // Cooldown before hyudoro is allowed to be rerolled
tic_t mapreset; // Map reset delay when enough players have joined an empty game
boolean thwompsactive; // Thwomps activate on lap 2
SINT8 spbplace; // SPB exists, give the person behind better items
boolean rainbowstartavailable; // Boolean, keeps track of if the rainbow start was gotten
// Client-sided, unsynched variables (NEVER use in anything that needs to be synced with other players)
tic_t bombflashtimer = 0; // Cooldown before another FlashPal can be intialized by a bomb exploding near a displayplayer. Avoids seizures.

View file

@ -6488,7 +6488,7 @@ Stage 1: red sparks
Stage 2: blue sparks
Stage 3: big large rainbow sparks
*/
static void K_SpawnDriftBoostExplosion(player_t *player, int stage)
void K_SpawnDriftBoostExplosion(player_t *player, int stage)
{
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE);

View file

@ -63,6 +63,7 @@ void K_UpdateDistanceFromFinishLine(player_t *const player);
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
INT32 K_GetKartDriftSparkValue(player_t *player);
void K_SpawnDriftBoostExplosion(player_t *player, int stage);
void K_KartUpdatePosition(player_t *player);
void K_DropItems(player_t *player);
void K_StripItems(player_t *player);

View file

@ -3472,6 +3472,7 @@ static void P_NetArchiveMisc(void)
WRITEUINT8(save_p, thwompsactive);
WRITESINT8(save_p, spbplace);
WRITEUINT8(save_p, rainbowstartavailable);
// Is it paused?
if (paused)
@ -3597,6 +3598,7 @@ static inline boolean P_NetUnArchiveMisc(void)
thwompsactive = (boolean)READUINT8(save_p);
spbplace = READSINT8(save_p);
rainbowstartavailable = (boolean)READUINT8(save_p);
// Is it paused?
if (READUINT8(save_p) == 0x2f)

View file

@ -2368,6 +2368,7 @@ lumpnum_t lastloadedmaplumpnum; // for comparative savegame
static void P_LevelInitStuff(void)
{
INT32 i;
UINT8 p = 0;
leveltime = 0;
@ -2414,6 +2415,9 @@ static void P_LevelInitStuff(void)
for (i = 0; i < MAXPLAYERS; i++)
{
if (playeringame[i] && !players[i].spectator)
p++;
if (grandprixinfo.gp == false)
{
players[i].lives = 3;
@ -2463,6 +2467,11 @@ static void P_LevelInitStuff(void)
players[i].follower = NULL;
}
rainbowstartavailable = false;
if (p >= 2)
rainbowstartavailable = true;
// SRB2Kart: map load variables
if (grandprixinfo.gp == true)
{
@ -2505,6 +2514,10 @@ static void P_LevelInitStuff(void)
memset(&battleovertime, 0, sizeof(struct battleovertime));
speedscramble = encorescramble = -1;
}
//

View file

@ -2194,6 +2194,13 @@ static void K_HandleLapIncrement(player_t *player)
player->karthud[khud_fault] = 1;
player->mo->momx = player->mo->momy = 0;
}
else if (rainbowstartavailable == true)
{
S_StartSound(player->mo, sfx_s23c);
player->kartstuff[k_driftboost] = 125;
K_SpawnDriftBoostExplosion(player, 3);
rainbowstartavailable = false;
}
}
}