autoring: replace followerskin Goddess cases with K_GetEffectiveFollowerSkin function

This commit is contained in:
James R 2024-05-05 03:02:53 -07:00
parent 78411a25ee
commit 11fce987c0
3 changed files with 48 additions and 32 deletions

View file

@ -338,7 +338,7 @@ void K_HandleFollower(player_t *player)
angle_t destAngle; angle_t destAngle;
INT32 angleDiff; INT32 angleDiff;
boolean fallbackfollower; INT32 followerskin;
if (player->followerready == false) if (player->followerready == false)
{ {
@ -353,14 +353,11 @@ void K_HandleFollower(player_t *player)
player->followerskin = -1; player->followerskin = -1;
} }
if (player->pflags & PF_AUTORING && player->followerskin == -1) followerskin = K_GetEffectiveFollowerSkin(player);
fallbackfollower = true;
else
fallbackfollower = false;
// don't do anything if we can't have a follower to begin with. // don't do anything if we can't have a follower to begin with.
// (It gets removed under those conditions) // (It gets removed under those conditions)
if (player->spectator || (player->followerskin < 0 && !fallbackfollower) if (player->spectator || followerskin < 0
|| player->mo == NULL || P_MobjWasRemoved(player->mo)) || player->mo == NULL || P_MobjWasRemoved(player->mo))
{ {
if (player->follower) if (player->follower)
@ -371,10 +368,7 @@ void K_HandleFollower(player_t *player)
} }
// Before we do anything, let's be sure of where we're supposed to be // Before we do anything, let's be sure of where we're supposed to be
if (fallbackfollower) fl = &followers[followerskin];
fl = &followers[K_FollowerAvailable("Goddess")];
else
fl = &followers[player->followerskin];
an = player->mo->angle + fl->atangle; an = player->mo->angle + fl->atangle;
zoffs = fl->zoffs; zoffs = fl->zoffs;
@ -427,7 +421,7 @@ void K_HandleFollower(player_t *player)
} }
// Set follower colour // Set follower colour
if (fallbackfollower) if (player->followerskin < 0) // using a fallback follower
color = fl->defaultcolor; color = fl->defaultcolor;
else else
color = K_GetEffectiveFollowerColor(player->followercolor, fl, player->skincolor, &skins[player->skin]); color = K_GetEffectiveFollowerColor(player->followercolor, fl, player->skincolor, &skins[player->skin]);
@ -762,22 +756,21 @@ void K_HandleFollower(player_t *player)
--------------------------------------------------*/ --------------------------------------------------*/
void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelodyspecial) void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelodyspecial)
{ {
// special case for checking for fallback follower for autoring
const INT32 followerskin = K_GetEffectiveFollowerSkin(taunter);
// Basic checks // Basic checks
if ( if (
taunter == NULL taunter == NULL
|| victim == NULL || victim == NULL
|| taunter->followerskin < -1 || followerskin < 0
|| taunter->followerskin >= numfollowers || followerskin >= numfollowers
) )
{ {
return; return;
} }
follower_t *fl; const follower_t *fl = &followers[followerskin];
if (taunter->followerskin == -1) /// mmm spaghetti
fl = &followers[K_FollowerAvailable("Goddess")]; // special case for checking for fallback follower for autoring
else
fl = &followers[taunter->followerskin];
// Restrict mystic melody special status // Restrict mystic melody special status
if (mysticmelodyspecial == true) if (mysticmelodyspecial == true)
@ -902,3 +895,16 @@ void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelo
} }
} }
} }
/*--------------------------------------------------
INT32 K_GetEffectiveFollowerSkin(const player_t *player);
See header file for description.
--------------------------------------------------*/
INT32 K_GetEffectiveFollowerSkin(const player_t *player)
{
if ((player->pflags & PF_AUTORING) && player->followerskin == -1)
return K_FollowerAvailable("Goddess");
else
return player->followerskin;
}

View file

@ -246,6 +246,21 @@ void K_RemoveFollower(player_t *player);
void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelodyspecial); void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelodyspecial);
/*--------------------------------------------------
INT32 K_GetEffectiveFollowerSkin(const player_t *player)
Returns the player's follower, set by profile or as
a fallback.
Input Arguments:-
player - The player.
Return:-
The resultant skin id for the follower, or -1 for None
--------------------------------------------------*/
INT32 K_GetEffectiveFollowerSkin(const player_t *player);
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif

View file

@ -2865,16 +2865,12 @@ void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker)
attacker->player->confirmVictim = (victim->player - players); attacker->player->confirmVictim = (victim->player - players);
attacker->player->confirmVictimDelay = TICRATE/2; attacker->player->confirmVictimDelay = TICRATE/2;
const INT32 followerskin = K_GetEffectiveFollowerSkin(attacker->player);
if (attacker->player->follower != NULL if (attacker->player->follower != NULL
&& attacker->player->followerskin >= -1 && followerskin >= 0
&& attacker->player->followerskin < numfollowers) && followerskin < numfollowers)
{ {
follower_t *fl; const follower_t *fl = &followers[followerskin];
if (attacker->player->followerskin == -1) /// mmm spaghetti
fl = &followers[K_FollowerAvailable("Goddess")]; // special case for checking for fallback follower for autoring
else
fl = &followers[attacker->player->followerskin];
attacker->player->follower->movecount = fl->hitconfirmtime; // movecount is used to play the hitconfirm animation for followers. attacker->player->follower->movecount = fl->hitconfirmtime; // movecount is used to play the hitconfirm animation for followers.
} }
} }
@ -12665,15 +12661,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
ring->shadowscale = 0; ring->shadowscale = 0;
P_SetTarget(&ring->target, player->mo); // user P_SetTarget(&ring->target, player->mo); // user
const INT32 followerskin = K_GetEffectiveFollowerSkin(player);
if (player->autoring if (player->autoring
&& player->follower != NULL && player->follower != NULL
&& P_MobjWasRemoved(player->follower) == false) && P_MobjWasRemoved(player->follower) == false
&& followerskin >= 0
&& followerskin < numfollowers)
{ {
const follower_t *fl = &followers[ const follower_t *fl = &followers[followerskin];
player->followerskin == -1
? K_FollowerAvailable("Goddess")
: player->followerskin
];
ring->cusval = player->follower->x - player->mo->x; ring->cusval = player->follower->x - player->mo->x;
ring->cvmem = player->follower->y - player->mo->y; ring->cvmem = player->follower->y - player->mo->y;