diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 6528511c3..8f8e69497 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -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) diff --git a/src/k_kart.c b/src/k_kart.c index 6c20790d6..80476eacf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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); } } diff --git a/src/k_kart.h b/src/k_kart.h index 00d9f853a..b984bff25 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 0e251c6b0..0d00a7e1b 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -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; diff --git a/src/p_inter.c b/src/p_inter.c index c31a1a5d4..9d75df2b7 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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); diff --git a/src/p_user.c b/src/p_user.c index 62d7010a8..58791c369 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -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--; diff --git a/src/r_skins.c b/src/r_skins.c index ee9f9e3ba..a9e87aaa4 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -631,7 +631,7 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum) } player->skincolor = newcolor = skin->prefcolor; - K_KartResetPlayerColor(player); + K_KartResetPlayerColor(player, true); } #endif