From c599d84d6e8deead070e009deb83bc122681034c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 5 Dec 2018 23:28:44 -0500 Subject: [PATCH] Actually, best of both: Let Grow/Shrink revert itself when it changes to 0, as well as add a function for removing either. Means we don't have to modify every single > 0/< 0 check, and is overall cleaner. --- src/g_game.c | 5 ++++- src/k_kart.c | 44 ++++++++++++++++++++++++-------------------- src/p_inter.c | 4 ++-- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index cb312284..ac8e27a3 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2431,7 +2431,10 @@ void G_PlayerReborn(INT32 player) } // Keep Shrink status, remove Grow status - growshrinktimer = min(players[player].kartstuff[k_growshrinktimer], 0); + if (players[player].kartstuff[k_growshrinktimer] < 0) + growshrinktimer = players[player].kartstuff[k_growshrinktimer]; + else + growshrinktimer = 0; bumper = players[player].kartstuff[k_bumper]; comebackpoints = players[player].kartstuff[k_comebackpoints]; diff --git a/src/k_kart.c b/src/k_kart.c index 1adbba84..2d315e65 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1989,6 +1989,18 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto return; } +static void K_RemoveGrowShrink(player_t *player) +{ + player->kartstuff[k_growshrinktimer] = 0; + if (player->kartstuff[k_invincibilitytimer] == 0) + player->mo->color = player->skincolor; + player->mo->scalespeed = mapheaderinfo[gamemap-1]->mobj_scale/TICRATE; + player->mo->destscale = mapheaderinfo[gamemap-1]->mobj_scale; + if (cv_kartdebugshrink.value && !modeattacking && !player->bot) + player->mo->destscale = 6*player->mo->destscale/8; + P_RestoreMusic(player); +} + void K_SquishPlayer(player_t *player, mobj_t *source, mobj_t *inflictor) { UINT8 scoremultiply = 1; @@ -2081,11 +2093,11 @@ void K_SquishPlayer(player_t *player, mobj_t *source, mobj_t *inflictor) player->kartstuff[k_squishedtimer] = TICRATE; // Reduce Shrink timer - if (player->kartstuff[k_growshrinktimer] < -2) + if (player->kartstuff[k_growshrinktimer] < 0) { player->kartstuff[k_growshrinktimer] += TICRATE; - if (player->kartstuff[k_growshrinktimer] > -2) - player->kartstuff[k_growshrinktimer] = -2; + if (player->kartstuff[k_growshrinktimer] >= 0) + K_RemoveGrowShrink(player); } player->powers[pw_flashing] = K_GetKartFlashing(player); @@ -3277,8 +3289,8 @@ static void K_DoShrink(player_t *user) } // Grow should get taken away. - if (players[i].kartstuff[k_growshrinktimer] > 2) - players[i].kartstuff[k_growshrinktimer] = 2; + if (players[i].kartstuff[k_growshrinktimer] > 0) + K_RemoveGrowShrink(&players[i]); //P_FlashPal(&players[i], PAL_NUKE, 10); S_StartSound(players[i].mo, sfx_kc59); @@ -4309,22 +4321,16 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_invincibilitytimer]) player->kartstuff[k_invincibilitytimer]--; - if (!player->kartstuff[k_respawn]) + if (!player->kartstuff[k_respawn] && player->kartstuff[k_growshrinktimer] != 0) { if (player->kartstuff[k_growshrinktimer] > 0) player->kartstuff[k_growshrinktimer]--; if (player->kartstuff[k_growshrinktimer] < 0) player->kartstuff[k_growshrinktimer]++; - } - if (player->kartstuff[k_growshrinktimer] == 1 || player->kartstuff[k_growshrinktimer] == -1) - { - if (player->kartstuff[k_invincibilitytimer] == 0) - player->mo->color = player->skincolor; - player->mo->destscale = mapheaderinfo[gamemap-1]->mobj_scale; - if (cv_kartdebugshrink.value && !modeattacking && !player->bot) - player->mo->destscale = 6*player->mo->destscale/8; - P_RestoreMusic(player); + // Back to normal + if (player->kartstuff[k_growshrinktimer] == 0) + K_RemoveGrowShrink(player); } if (player->kartstuff[k_stealingtimer] == 0 && player->kartstuff[k_stolentimer] == 0 @@ -4879,10 +4885,7 @@ void K_StripOther(player_t *player) player->kartstuff[k_roulettetype] = 0; player->kartstuff[k_invincibilitytimer] = 0; - if (player->kartstuff[k_growshrinktimer] > 0) - player->kartstuff[k_growshrinktimer] = 2; - else if (player->kartstuff[k_growshrinktimer] < 0) - player->kartstuff[k_growshrinktimer] = -2; + K_RemoveGrowShrink(player); if (player->kartstuff[k_eggmanexplode]) { @@ -5483,6 +5486,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) // Increase your size while charging your engine. if (leveltime < starttime+10) { + player->mo->scalespeed = mapheaderinfo[gamemap-1]->mobj_scale/12; player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale) + (player->kartstuff[k_boostcharge]*131); if (cv_kartdebugshrink.value && !modeattacking && !player->bot) player->mo->destscale = 6*player->mo->destscale/8; @@ -6433,7 +6437,7 @@ static void K_drawKartItem(void) else localpatch = kp_nodraw; } - else if (stplyr->kartstuff[k_growshrinktimer] > 1) + else if (stplyr->kartstuff[k_growshrinktimer] > 0) { if (leveltime & 1) localpatch = kp_grow[offset]; diff --git a/src/p_inter.c b/src/p_inter.c index 7c599016..fce8ccd5 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -131,8 +131,8 @@ boolean P_CanPickupItem(player_t *player, UINT8 weapon) else { // Item-specific timer going off - if (player->kartstuff[k_stealingtimer] || player->kartstuff[k_stolentimer] - || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_rocketsneakertimer] + if (player->kartstuff[k_stealingtimer] || player->kartstuff[k_stolentimer] + || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_rocketsneakertimer] || player->kartstuff[k_eggmanexplode]) return false;