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;
INT32 angleDiff;
boolean fallbackfollower;
INT32 followerskin;
if (player->followerready == false)
{
@ -353,14 +353,11 @@ void K_HandleFollower(player_t *player)
player->followerskin = -1;
}
if (player->pflags & PF_AUTORING && player->followerskin == -1)
fallbackfollower = true;
else
fallbackfollower = false;
followerskin = K_GetEffectiveFollowerSkin(player);
// don't do anything if we can't have a follower to begin with.
// (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))
{
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
if (fallbackfollower)
fl = &followers[K_FollowerAvailable("Goddess")];
else
fl = &followers[player->followerskin];
fl = &followers[followerskin];
an = player->mo->angle + fl->atangle;
zoffs = fl->zoffs;
@ -427,7 +421,7 @@ void K_HandleFollower(player_t *player)
}
// Set follower colour
if (fallbackfollower)
if (player->followerskin < 0) // using a fallback follower
color = fl->defaultcolor;
else
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)
{
// special case for checking for fallback follower for autoring
const INT32 followerskin = K_GetEffectiveFollowerSkin(taunter);
// Basic checks
if (
taunter == NULL
|| victim == NULL
|| taunter->followerskin < -1
|| taunter->followerskin >= numfollowers
|| followerskin < 0
|| followerskin >= numfollowers
)
{
return;
}
follower_t *fl;
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];
const follower_t *fl = &followers[followerskin];
// Restrict mystic melody special status
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);
/*--------------------------------------------------
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
} // extern "C"
#endif

View file

@ -2865,16 +2865,12 @@ void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker)
attacker->player->confirmVictim = (victim->player - players);
attacker->player->confirmVictimDelay = TICRATE/2;
const INT32 followerskin = K_GetEffectiveFollowerSkin(attacker->player);
if (attacker->player->follower != NULL
&& attacker->player->followerskin >= -1
&& attacker->player->followerskin < numfollowers)
&& followerskin >= 0
&& followerskin < numfollowers)
{
follower_t *fl;
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];
const follower_t *fl = &followers[followerskin];
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;
P_SetTarget(&ring->target, player->mo); // user
const INT32 followerskin = K_GetEffectiveFollowerSkin(player);
if (player->autoring
&& player->follower != NULL
&& P_MobjWasRemoved(player->follower) == false)
&& P_MobjWasRemoved(player->follower) == false
&& followerskin >= 0
&& followerskin < numfollowers)
{
const follower_t *fl = &followers[
player->followerskin == -1
? K_FollowerAvailable("Goddess")
: player->followerskin
];
const follower_t *fl = &followers[followerskin];
ring->cusval = player->follower->x - player->mo->x;
ring->cvmem = player->follower->y - player->mo->y;