From 8b79689d8106714fc1370aa6303ff604b331a4ae Mon Sep 17 00:00:00 2001 From: "James R." Date: Sun, 1 Oct 2023 14:33:58 -0700 Subject: [PATCH] Add K_DirectorIsAvailable Fixes director not working correctly if there are duplicates in displayplayers. --- src/g_build_ticcmd.cpp | 2 +- src/k_director.c | 7 +++++++ src/k_director.h | 1 + src/k_hud.c | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/g_build_ticcmd.cpp b/src/g_build_ticcmd.cpp index c12bdd44c..b81c205e4 100644 --- a/src/g_build_ticcmd.cpp +++ b/src/g_build_ticcmd.cpp @@ -245,7 +245,7 @@ class TiccmdBuilder bool director_input() { - if (demo.freecam || G_IsPartyLocal(displayplayers[forplayer()]) == true) + if (demo.freecam || !K_DirectorIsAvailable(viewnum)) { return false; } diff --git a/src/k_director.c b/src/k_director.c index dd2f55ad6..d2d82212c 100644 --- a/src/k_director.c +++ b/src/k_director.c @@ -11,6 +11,7 @@ #include "k_director.h" #include "d_netcmd.h" #include "p_local.h" +#include "g_party.h" #define SWITCHTIME TICRATE * 5 // cooldown between unforced switches #define BOREDOMTIME 3 * TICRATE / 2 // how long until players considered far apart? @@ -322,3 +323,9 @@ void K_ToggleDirector(boolean active) directorinfo.active = active; } + +boolean K_DirectorIsAvailable(UINT8 viewnum) +{ + return viewnum <= r_splitscreen && viewnum < G_PartySize(consoleplayer) && + displayplayers[viewnum] != G_PartyMember(consoleplayer, viewnum); +} diff --git a/src/k_director.h b/src/k_director.h index 47b4b2265..297bff72e 100644 --- a/src/k_director.h +++ b/src/k_director.h @@ -28,6 +28,7 @@ void K_UpdateDirector(void); void K_DrawDirectorDebugger(void); void K_DirectorFollowAttack(player_t *player, mobj_t *inflictor, mobj_t *source); void K_ToggleDirector(boolean active); +boolean K_DirectorIsAvailable(UINT8 viewnum); #ifdef __cplusplus } // extern "C" diff --git a/src/k_hud.c b/src/k_hud.c index fa1ad8f8a..5e69f380a 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -5618,7 +5618,7 @@ void K_drawKartHUD(void) K_drawKartPowerUps(); - if (G_IsPartyLocal(displayplayers[viewnum]) == false) + if (K_DirectorIsAvailable(viewnum) == true) { K_drawDirectorHUD(); }