From 11fce987c00d22085955e01b887b18514dbd0c18 Mon Sep 17 00:00:00 2001 From: James R <justsomejames2@gmail.com> Date: Sun, 5 May 2024 03:02:53 -0700 Subject: [PATCH] autoring: replace followerskin Goddess cases with K_GetEffectiveFollowerSkin function --- src/k_follower.c | 42 ++++++++++++++++++++++++------------------ src/k_follower.h | 15 +++++++++++++++ src/k_kart.c | 23 +++++++++-------------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/k_follower.c b/src/k_follower.c index 1052ec019..dc02685b6 100644 --- a/src/k_follower.c +++ b/src/k_follower.c @@ -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; +} diff --git a/src/k_follower.h b/src/k_follower.h index 579532d4a..edab92f8e 100644 --- a/src/k_follower.h +++ b/src/k_follower.h @@ -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 diff --git a/src/k_kart.c b/src/k_kart.c index dfc23d61f..bfd837f24 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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; -- GitLab