diff --git a/src/objects/ufo.c b/src/objects/ufo.c index ca2e237e1..5642fe5f4 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -925,7 +925,7 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN ? demo.skinlist[demo.currentskinid[(source->player-players)]].flags : skins[source->player->skin].flags; if (skinflags & SF_IRONMAN) - SetRandomFakePlayerSkin(source->player, true); + SetRandomFakePlayerSkin(source->player, true, false); } ufo_intangible(ufo) = 60; diff --git a/src/p_inter.c b/src/p_inter.c index db0c9da09..e4f527a0b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3276,6 +3276,15 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da Obj_EndBungee(player); K_BumperInflate(target->player); + UINT32 hurtskinflags = (demo.playback) + ? demo.skinlist[demo.currentskinid[(player-players)]].flags + : skins[player->skin].flags; + if (hurtskinflags & SF_IRONMAN) + { + if (gametyperules & GTR_BUMPERS) + SetRandomFakePlayerSkin(player, false, true); + } + // Explosions are explicit combo setups. if (damagetype & DMG_EXPLODE) player->bumperinflate = 0; diff --git a/src/p_spec.c b/src/p_spec.c index 2f159498b..15865499e 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2017,7 +2017,7 @@ static void K_HandleLapIncrement(player_t *player) : skins[player->skin].flags; if (skinflags & SF_IRONMAN) { - SetRandomFakePlayerSkin(player, true); + SetRandomFakePlayerSkin(player, true, false); } // Always trust waypoints entering the first lap. diff --git a/src/p_user.c b/src/p_user.c index 78cbf67b1..1c55f0236 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4542,7 +4542,7 @@ void P_PlayerThink(player_t *player) } else if (!(gametyperules & GTR_CIRCUIT)) { - SetRandomFakePlayerSkin(player, false); + SetRandomFakePlayerSkin(player, false, false); } } } diff --git a/src/r_skins.c b/src/r_skins.c index 7ae373015..d1fea1be1 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -518,7 +518,7 @@ void SetFakePlayerSkin(player_t* player, INT32 skinid) } // Loudly rerandomize -void SetRandomFakePlayerSkin(player_t* player, boolean fast) +void SetRandomFakePlayerSkin(player_t* player, boolean fast, boolean instant) { INT32 i; UINT8 usableskins = 0, maxskinpick; @@ -549,6 +549,9 @@ void SetRandomFakePlayerSkin(player_t* player, boolean fast) SetFakePlayerSkin(player, i); + if (instant) + return; + if (player->mo && player->spectator == false && !(player->pflags & PF_VOID)) { S_StartSound(player->mo, sfx_kc33); diff --git a/src/r_skins.h b/src/r_skins.h index 03816d758..ddf8cae74 100644 --- a/src/r_skins.h +++ b/src/r_skins.h @@ -127,7 +127,7 @@ UINT8 R_BotDefaultSkin(void); // Heavy Magician void SetFakePlayerSkin(player_t* player, INT32 skinnum); -void SetRandomFakePlayerSkin(player_t* player, boolean fast); +void SetRandomFakePlayerSkin(player_t* player, boolean fast, boolean instant); void ClearFakePlayerSkin(player_t* player); // Visual flair