From 47a5a0b6dced9c74443e08f446932c01cb824357 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 29 Jun 2023 19:04:50 -0700 Subject: [PATCH] Add Rhythm Badge power-up, no instawhip cooldown --- src/d_player.h | 1 + src/k_kart.c | 17 +++++++++++++---- src/k_powerup.cpp | 8 ++++++++ src/p_saveg.c | 2 ++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index ca73652f9..a30d5d895 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -465,6 +465,7 @@ typedef struct { struct powerupvars_t { UINT16 superTimer; UINT16 barrierTimer; + UINT16 rhythmBadgeTimer; mobj_t *flickyController; }; diff --git a/src/k_kart.c b/src/k_kart.c index 2c1acc0d9..f2ce208e2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8100,6 +8100,12 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) } } + if (player->powerup.rhythmBadgeTimer > 0) + { + player->instaShieldCooldown = min(player->instaShieldCooldown, 1); + player->powerup.rhythmBadgeTimer--; + } + if (player->powerup.barrierTimer > 0) { player->powerup.barrierTimer--; @@ -10891,10 +10897,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->flashing = max(player->flashing, 12); player->mo->momz += 4*mapobjectscale; - // Spawn in triangle formation - Obj_SpawnInstaWhipRecharge(player, 0); - Obj_SpawnInstaWhipRecharge(player, ANGLE_120); - Obj_SpawnInstaWhipRecharge(player, ANGLE_240); + if (!K_PowerUpRemaining(player, POWERUP_BADGE)) + { + // Spawn in triangle formation + Obj_SpawnInstaWhipRecharge(player, 0); + Obj_SpawnInstaWhipRecharge(player, ANGLE_120); + Obj_SpawnInstaWhipRecharge(player, ANGLE_240); + } } } diff --git a/src/k_powerup.cpp b/src/k_powerup.cpp index c8b637955..a452d307e 100644 --- a/src/k_powerup.cpp +++ b/src/k_powerup.cpp @@ -14,6 +14,9 @@ tic_t K_PowerUpRemaining(const player_t* player, kartitems_t powerup) case POWERUP_BARRIER: return player->powerup.barrierTimer; + case POWERUP_BADGE: + return player->powerup.rhythmBadgeTimer; + case POWERUP_SUPERFLICKY: return Obj_SuperFlickySwarmTime(player->powerup.flickyController); @@ -39,6 +42,10 @@ void K_GivePowerUp(player_t* player, kartitems_t powerup, tic_t time) K_GiveBumpersToPlayer(player, nullptr, 5); break; + case POWERUP_BADGE: + player->powerup.rhythmBadgeTimer += time; + break; + case POWERUP_SUPERFLICKY: if (K_PowerUpRemaining(player, POWERUP_SUPERFLICKY)) { @@ -70,6 +77,7 @@ void K_DropPowerUps(player_t* player) simple_drop(POWERUP_SMONITOR, player->powerup.superTimer); simple_drop(POWERUP_BARRIER, player->powerup.barrierTimer); + simple_drop(POWERUP_BADGE, player->powerup.rhythmBadgeTimer); if (K_PowerUpRemaining(player, POWERUP_SUPERFLICKY)) { diff --git a/src/p_saveg.c b/src/p_saveg.c index ce68fa36c..e6f7a61d6 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -638,6 +638,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) // powerupvars_t WRITEUINT16(save->p, players[i].powerup.superTimer); WRITEUINT16(save->p, players[i].powerup.barrierTimer); + WRITEUINT16(save->p, players[i].powerup.rhythmBadgeTimer); } } @@ -1066,6 +1067,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) // powerupvars_t players[i].powerup.superTimer = READUINT16(save->p); players[i].powerup.barrierTimer = READUINT16(save->p); + players[i].powerup.rhythmBadgeTimer = READUINT16(save->p); //players[i].viewheight = P_GetPlayerViewHeight(players[i]); // scale cannot be factored in at this point }