Clean up more alt shrink code
This commit is contained in:
parent
66c894558f
commit
d7f3a88d9f
4 changed files with 33 additions and 71 deletions
|
|
@ -2866,7 +2866,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
|
||||
// Keep Shrink status, remove Grow status
|
||||
// Alt. Shrink is a powerup, so don't keep that.
|
||||
if (K_IsLegacyShrunk(&players[player]))
|
||||
if (players[player].growshrinktimer < 0 && !K_IsKartItemAlternate(KITEM_SHRINK))
|
||||
growshrinktimer = players[player].growshrinktimer;
|
||||
else
|
||||
growshrinktimer = 0;
|
||||
|
|
|
|||
|
|
@ -1481,6 +1481,10 @@ INT32 KO_SPBRaceOdds(INT32 odds, const kartroulette_t *roulette, const kartresul
|
|||
return odds;
|
||||
}
|
||||
|
||||
#define ALTSHRINK_EPSILON (320 * FRACUNIT)
|
||||
#define NEIGHBOR_IFRAMES (TICRATE / 2)
|
||||
#define BASE_IFRAMES (2 * TICRATE)
|
||||
|
||||
static void K_DoGrowShrink(player_t *player, boolean shrinking)
|
||||
{
|
||||
player->mo->scalespeed = mapobjectscale/TICRATE;
|
||||
|
|
@ -1500,6 +1504,16 @@ static void K_DoGrowShrink(player_t *player, boolean shrinking)
|
|||
player->growshrinktimer = (gametyperules & GTR_CLOSERPLAYERS ? 8 : 12) * ((shrinking) ? -TICRATE : TICRATE);
|
||||
}
|
||||
|
||||
if (shrinking)
|
||||
{
|
||||
// Find neighbors
|
||||
INT32 n = K_CountNeighboringPlayers(player, ALTSHRINK_EPSILON, &(vector3_t){});
|
||||
|
||||
// For every neighbor, add some iframes for a clean breakaway.
|
||||
UINT32 iframes = BASE_IFRAMES + n * NEIGHBOR_IFRAMES;
|
||||
player->flashing = iframes > UINT16_MAX ? UINT16_MAX : iframes;
|
||||
}
|
||||
|
||||
if (player->invincibilitytimer > 0)
|
||||
{
|
||||
; // invincibility has priority in P_RestoreMusic, no point in starting here
|
||||
|
|
@ -2100,7 +2114,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
|
|||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
player->itemamount--;
|
||||
if (K_IsLegacyShrunk(player))
|
||||
if (player->growshrinktimer < 0 && !K_IsKartItemAlternate(KITEM_SHRINK))
|
||||
{
|
||||
// If you're shrunk, then "grow" will just make you normal again...
|
||||
K_RemoveGrowShrink(player);
|
||||
|
|
@ -2130,7 +2144,6 @@ void K_PlayerItemThink(player_t *player, boolean onground)
|
|||
if (K_IsKartItemAlternate(KITEM_SHRINK))
|
||||
{
|
||||
K_DoGrowShrink(player, true);
|
||||
K_AltShrinkIFrames(player);
|
||||
|
||||
S_StartSound(player->mo, sfx_kc46);
|
||||
}
|
||||
|
|
@ -2338,60 +2351,14 @@ void K_PlayerItemThink(player_t *player, boolean onground)
|
|||
}
|
||||
}
|
||||
|
||||
/** \brief Returns true or false if the player is shrunk.
|
||||
|
||||
\param player (player_t) Player to test shrunken status for
|
||||
|
||||
\return Is this player shrunk?
|
||||
*/
|
||||
boolean K_IsShrunk(const player_t *player)
|
||||
INT16 K_GetShrinkTime(const player_t *player)
|
||||
{
|
||||
return (player->growshrinktimer < 0);
|
||||
return player->growshrinktimer * -1;
|
||||
}
|
||||
|
||||
INT16 K_GetShrinkTime(player_t *player)
|
||||
boolean K_IsAltShrunk(const player_t *player)
|
||||
{
|
||||
return (player->growshrinktimer * -1);
|
||||
}
|
||||
|
||||
fixed_t K_AccomodateShrinkScaling(fixed_t x)
|
||||
{
|
||||
return FixedDiv(x, SHRINK_SCALE);
|
||||
}
|
||||
|
||||
/** \brief Depending on the Shrink type set, this returns true or false if the player is shrunk.
|
||||
|
||||
\param player (player_t) Player to test shrunken status for
|
||||
\param legacy (boolean) Legacy shrink?
|
||||
|
||||
\return void
|
||||
*/
|
||||
boolean K_IsShrunkMode(const player_t *player, boolean legacy)
|
||||
{
|
||||
boolean shrunk = K_IsShrunk(player);
|
||||
boolean legacytype = (!K_IsKartItemAlternate(KITEM_SHRINK));
|
||||
|
||||
if (legacy)
|
||||
{
|
||||
return ((shrunk) && (legacytype));
|
||||
}
|
||||
|
||||
return ((shrunk) && (!legacytype));
|
||||
}
|
||||
|
||||
#define ALTSHRINK_EPSILON (320 * FRACUNIT)
|
||||
#define NEIGHBOR_IFRAMES (TICRATE / 2)
|
||||
#define BASE_IFRAMES (2 * TICRATE)
|
||||
|
||||
void K_AltShrinkIFrames(player_t *player)
|
||||
{
|
||||
vector3_t tempclusterpoint;
|
||||
|
||||
// Find neighbors
|
||||
INT32 N = K_CountNeighboringPlayers(player, ALTSHRINK_EPSILON, &tempclusterpoint);
|
||||
|
||||
// For every neighbor, add some iframes for a clean breakaway.
|
||||
player->flashing = (UINT16)min((INT32)(UINT16_MAX), BASE_IFRAMES + (NEIGHBOR_IFRAMES * N));
|
||||
return player->growshrinktimer < 0 && K_IsKartItemAlternate(KITEM_SHRINK);
|
||||
}
|
||||
|
||||
#define PITY_SHRINKINCREASE_BASE (3)
|
||||
|
|
@ -2400,7 +2367,7 @@ void K_AltShrinkIFrames(player_t *player)
|
|||
void K_AltShrinkPityIncrease(player_t *player)
|
||||
{
|
||||
// Increase your shrink timer by a little bit for every player you run into.
|
||||
INT32 shrinktime = (UINT32)(K_GetShrinkTime(player));
|
||||
INT32 shrinktime = K_GetShrinkTime(player);
|
||||
|
||||
fixed_t dimin = FRACUNIT;
|
||||
|
||||
|
|
|
|||
|
|
@ -171,17 +171,12 @@ useoddsfunc_f KO_SPBRaceOdds;
|
|||
|
||||
void K_DoThunderShield(player_t *player);
|
||||
void K_BreakBubbleShield(player_t* player);
|
||||
void K_PlayerItemThink(player_t *player, boolean onground);
|
||||
|
||||
boolean K_IsShrunk(const player_t *player);
|
||||
INT16 K_GetShrinkTime(player_t *player);
|
||||
fixed_t K_AccomodateShrinkScaling(fixed_t x);
|
||||
boolean K_IsShrunkMode(const player_t *player, boolean legacy);
|
||||
#define K_IsLegacyShrunk(player) (K_IsShrunkMode(player, true))
|
||||
#define K_IsAltShrunk(player) (K_IsShrunkMode(player, false))
|
||||
void K_AltShrinkIFrames(player_t *player);
|
||||
INT16 K_GetShrinkTime(const player_t *player);
|
||||
boolean K_IsAltShrunk(const player_t *player);
|
||||
void K_AltShrinkPityIncrease(player_t *player);
|
||||
|
||||
void K_PlayerItemThink(player_t *player, boolean onground);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
16
src/k_kart.c
16
src/k_kart.c
|
|
@ -1568,7 +1568,7 @@ static void K_RespawnChecker(player_t *player)
|
|||
}
|
||||
else if (player->respawn == 1)
|
||||
{
|
||||
if (K_IsShrunk(player))
|
||||
if (player->growshrinktimer < 0)
|
||||
{
|
||||
player->mo->scalespeed = mapobjectscale/TICRATE;
|
||||
player->mo->destscale = (6*mapobjectscale)/8;
|
||||
|
|
@ -2638,8 +2638,8 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
|
||||
if (K_IsAltShrunk(player)) // Alt. Shrink
|
||||
{
|
||||
fixed_t shrinkspeed = K_AccomodateShrinkScaling(SHRINKSPEEDBOOST);
|
||||
fixed_t shrinkaccel = K_AccomodateShrinkScaling(SHRINKACCELBOOST);
|
||||
fixed_t shrinkspeed = FixedDiv(SHRINKSPEEDBOOST, SHRINK_SCALE);
|
||||
fixed_t shrinkaccel = FixedDiv(SHRINKACCELBOOST, SHRINK_SCALE);
|
||||
|
||||
K_DoBoost(player, FixedMul(shrinkspeed, GROW_SCALE), FixedMul(shrinkaccel, GROW_SCALE), SHRINKSTACKABLE, SHRINKSTACKABLE); // + 45% top speed, + 200% acceleration
|
||||
}
|
||||
|
|
@ -3303,7 +3303,7 @@ void K_RemoveGrowShrink(player_t *player)
|
|||
{
|
||||
if (player->growshrinktimer > 0) // Play Shrink noise
|
||||
S_StartSound(player->mo, sfx_kc59);
|
||||
else if (K_IsShrunk(player)) // Play Grow noise
|
||||
else if (player->growshrinktimer < 0) // Play Grow noise
|
||||
S_StartSound(player->mo, sfx_kc5a);
|
||||
|
||||
K_KartResetPlayerColor(player);
|
||||
|
|
@ -3331,7 +3331,7 @@ void K_SquishPlayer(player_t *player, mobj_t *inflictor, mobj_t *source)
|
|||
player->squishedtimer = TICRATE;
|
||||
|
||||
// Reduce Shrink timer for Legacy Shrink
|
||||
if (K_IsLegacyShrunk(player))
|
||||
if (player->growshrinktimer < 0 && !K_IsKartItemAlternate(KITEM_SHRINK))
|
||||
{
|
||||
player->growshrinktimer += TICRATE;
|
||||
if (player->growshrinktimer >= 0)
|
||||
|
|
@ -7066,7 +7066,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
{
|
||||
if (player->growshrinktimer > 0)
|
||||
player->growshrinktimer--;
|
||||
if (K_IsShrunk(player))
|
||||
if (player->growshrinktimer < 0)
|
||||
player->growshrinktimer++;
|
||||
|
||||
// Back to normal
|
||||
|
|
@ -7400,7 +7400,7 @@ void K_KartResetPlayerColor(player_t *player)
|
|||
if (player->growshrinktimer % 5 == 0)
|
||||
{
|
||||
player->mo->colorized = true;
|
||||
player->mo->color = (K_IsShrunk(player) ? SKINCOLOR_CREAMSICLE : SKINCOLOR_PERIWINKLE);
|
||||
player->mo->color = player->growshrinktimer < 0 ? SKINCOLOR_CREAMSICLE : SKINCOLOR_PERIWINKLE;
|
||||
fullbright = true;
|
||||
goto finalise;
|
||||
}
|
||||
|
|
@ -10221,7 +10221,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
if (player->itemtype == KITEM_SPB
|
||||
|| player->itemtype == KITEM_SHRINK
|
||||
|| K_IsLegacyShrunk(player))
|
||||
|| (player->growshrinktimer < 0 && !K_IsKartItemAlternate(KITEM_SHRINK)))
|
||||
indirectitemcooldown = 20*TICRATE;
|
||||
|
||||
if (player->hyudorotimer > 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue