Fix grow and invin color sticking with previous commit

This commit is contained in:
NepDisk 2025-12-20 09:32:31 -05:00
parent 475b92174f
commit a8a5392304
7 changed files with 38 additions and 21 deletions

View file

@ -1883,7 +1883,7 @@ static void SendNameAndColor(UINT8 n)
player->skincolor = cv_playercolor[n].value;
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
// Update follower for local games:
if (cv_follower[n].value >= -1)

View file

@ -3429,7 +3429,7 @@ void K_RemoveGrowShrink(player_t *player)
else if (player->growshrinktimer < 0) // Play Grow noise
S_StartSound(player->mo, sfx_kc5a);
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
player->mo->scalespeed = mapobjectscale/TICRATE;
player->mo->destscale = mapobjectscale;
@ -7284,6 +7284,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
player->invincibilitybottleneck = 0;
player->invincibilitywarning = 0;
}
if (!player->invincibilitytimer)
K_KartResetPlayerColor(player,true);
}
else
{
@ -7447,7 +7450,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
{
mobj_t *eggsexplode;
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
//player->flashing = 0;
eggsexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SPBEXPLOSION);
@ -7594,7 +7597,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
K_UpdateSPBTimer();
}
void K_KartResetPlayerColor(player_t *player)
void K_KartResetPlayerColor(player_t *player, boolean disablecolor)
{
boolean fullbright = false;
@ -7603,13 +7606,8 @@ void K_KartResetPlayerColor(player_t *player)
if (player->mo->health <= 0 || player->playerstate == PST_DEAD) // Override everything
{
if (player->dye)
{
player->mo->colorized = (player->dye != 0);
player->mo->color = player->dye;
}
else
player->mo->color = player->skincolor;
player->mo->colorized = (player->dye != 0);
player->mo->color = player->dye ? player->dye : player->skincolor;
goto finalise;
}
@ -7678,6 +7676,12 @@ void K_KartResetPlayerColor(player_t *player)
fullbright = true;
goto finalise;
}
else
{
player->mo->colorized = (player->dye != 0);
player->mo->color = player->dye ? player->dye : player->skincolor;
goto finalise;
}
}
if (player->ringboost && (leveltime & 1)) // ring boosting
@ -7686,10 +7690,11 @@ void K_KartResetPlayerColor(player_t *player)
fullbright = true;
goto finalise;
}
else if (player->dye)
else if (disablecolor || player->dye)
{
player->mo->colorized = (player->dye != 0);
player->mo->color = player->dye;
player->mo->color = player->dye ? player->dye : player->skincolor;
goto finalise;
}
finalise:
@ -7712,7 +7717,7 @@ finalise:
void K_KartPlayerAfterThink(player_t *player)
{
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, false);
// Move held objects (Bananas, Orbinaut, etc)
K_MoveHeldObjects(player);
@ -10339,7 +10344,7 @@ void K_StripOther(player_t *player)
player->eggmanexplode = 0;
player->eggmanblame = -1;
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
}
}

View file

@ -220,7 +220,7 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo);
void K_SpawnBumpEffect(mobj_t *mo);
void K_KartMoveAnimation(player_t *player);
void K_KartPlayerHUDUpdate(player_t *player);
void K_KartResetPlayerColor(player_t *player);
void K_KartResetPlayerColor(player_t *player, boolean disablecolor);
UINT8 K_RaceLapCount(INT16 mapNum);
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
void K_KartPlayerAfterThink(player_t *player);

View file

@ -1353,8 +1353,15 @@ static int player_set(lua_State *L)
plr->carry = luaL_checkinteger(L, 3);
break;
case player_dye:
plr->dye = luaL_checkinteger(L, 3);
{
UINT16 dye = luaL_checkinteger(L, 3);
if (!dye)
K_KartResetPlayerColor(plr, true);
plr->dye = dye;
break;
}
case player_position:
plr->position = luaL_checkinteger(L, 3);
break;

View file

@ -2047,7 +2047,7 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
player->carry = CR_NONE;
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
P_ResetPlayer(player);

View file

@ -1806,7 +1806,7 @@ static void P_CheckInvincibilityTimer(player_t *player)
// Resume normal music stuff.
if (player->invincibilitytimer == 1 || player->powers[pw_invulnerability] == 1)
{
//K_KartResetPlayerColor(player); -- this gets called every tic anyways
//K_KartResetPlayerColor(player, true); -- this gets called every tic anyways
G_GhostAddColor((INT32) (player - players), GHC_NORMAL);
P_RestoreMusic(player);
@ -2702,7 +2702,7 @@ static void P_DeathThink(player_t *player)
if (!player->mo)
return;
//K_KartResetPlayerColor(player); -- called at death, don't think we need to re-establish
//K_KartResetPlayerColor(player, true); -- called at death, don't think we need to re-establish
P_CalcHeight(player);
}
@ -4401,8 +4401,13 @@ void P_PlayerThink(player_t *player)
player->powers[pw_sneakers]--;
if (player->powers[pw_invulnerability] && player->powers[pw_invulnerability] < UINT16_MAX)
{
player->powers[pw_invulnerability]--;
if (!player->powers[pw_invulnerability])
K_KartResetPlayerColor(player,true);
}
if (player->flashing && player->flashing < UINT16_MAX &&
(player->spectator || player->flashing < K_GetKartFlashing(player)))
player->flashing--;

View file

@ -631,7 +631,7 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
}
player->skincolor = newcolor = skin->prefcolor;
K_KartResetPlayerColor(player);
K_KartResetPlayerColor(player, true);
}
#endif