From 494843d78f37772df3fc6dcf4008e1fd4f2d8db5 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Wed, 27 Mar 2024 22:02:57 -0700 Subject: [PATCH 1/2] Rerandomize Heavy Magician when recovering in GTR_BUMPERS --- src/objects/ufo.c | 2 +- src/p_inter.c | 3 +++ src/p_spec.c | 2 +- src/p_user.c | 2 +- src/r_skins.c | 5 ++++- src/r_skins.h | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) 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..278156474 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3276,6 +3276,9 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da Obj_EndBungee(player); K_BumperInflate(target->player); + 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 From 038e552c80d74d57fea0d5cf4077c0de12757eaa Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Thu, 28 Mar 2024 18:09:25 -0700 Subject: [PATCH 2/2] Only do Heavy Magician behavior for Heavy Magician, lol --- src/p_inter.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index 278156474..e4f527a0b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3276,8 +3276,14 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da Obj_EndBungee(player); K_BumperInflate(target->player); - if (gametyperules & GTR_BUMPERS) - SetRandomFakePlayerSkin(player, false, true); + 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)