From 71a2697faebe01873cd5c41aeff82116356abcb0 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Thu, 23 Apr 2026 18:39:22 -0400 Subject: [PATCH] Add director option to multiplayer replays --- src/deh_tables.c | 1 + src/m_menu.c | 29 ++++++++++++++++++++++++++--- src/m_menu.h | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index 0920083ab..e1c06f8a2 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -831,6 +831,7 @@ struct menu_routine_s const MENU_ROUTINES[] = { { "PLAYBACKSETVIEWS", &MR_PlaybackSetViews }, { "PLAYBACKADJUSTVIEW", &MR_PlaybackAdjustView }, { "PLAYBACKTOGGLEFREECAM", &MR_PlaybackToggleFreecam }, + { "PLAYBACKTOGGLEDIRECTOR", &MR_PlaybackToggleDirector }, { "PLAYBACKQUIT", &MR_PlaybackQuit }, { "HANDLEIMAGEDEF", &MR_HandleImageDef }, { "HANDLEMUSICTEST", &MR_HandleMusicTest }, diff --git a/src/m_menu.c b/src/m_menu.c index 461590d92..f7ef3e95c 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -108,6 +108,8 @@ int snprintf(char *str, size_t n, const char *fmt, ...); #include "qs22j.h" +#include "k_director.h" + typedef enum { QUITMSG = 0, @@ -1232,6 +1234,9 @@ static boolean M_DemoBinds(INT32 ch) { switch (ch) { + case ';': // toggle director + MR_PlaybackToggleDirector(0); + break; case '\'': // toggle freecam MR_PlaybackToggleFreecam(0); break; @@ -5214,6 +5219,8 @@ void MD_DrawPlaybackMenu(void) M_SetItemVisible(MN_PLAYBACK, "VIEW3", !modeattacking && r_splitscreen >= 2); M_SetItemVisible(MN_PLAYBACK, "VIEW4", !modeattacking && r_splitscreen >= 3); + M_SetItemVisible(MN_PLAYBACK, "DIRECTOR", !modeattacking); + if (modeattacking) { M_SetItemX(MN_PLAYBACK, "FREECAM", 72); @@ -5222,9 +5229,10 @@ void MD_DrawPlaybackMenu(void) } else { - M_SetItemX(MN_PLAYBACK, "FREECAM", 156); - M_SetItemX(MN_PLAYBACK, "QUIT", 172); - currentMenu->x = BASEVIDWIDTH/2 - 88; + M_SetItemX(MN_PLAYBACK, "DIRECTOR", 156); + M_SetItemX(MN_PLAYBACK, "FREECAM", 172); + M_SetItemX(MN_PLAYBACK, "QUIT", 188); + currentMenu->x = BASEVIDWIDTH/2 - 98; } // wip @@ -5428,6 +5436,7 @@ INT32 MR_PlaybackToggleFreecam(INT32 choice) splitscreen = 0; R_ExecuteSetViewSize(); + G_SyncDemoParty(consoleplayer, 0); UINT8 i; for (i = 0; i <= r_splitscreen; ++i) { @@ -5436,6 +5445,20 @@ INT32 MR_PlaybackToggleFreecam(INT32 choice) return true; } +INT32 MR_PlaybackToggleDirector(INT32 choice) +{ + (void)choice; + M_ClearMenus(true); + + // remove splitscreen: + splitscreen = 0; + R_ExecuteSetViewSize(); + + G_SyncDemoParty(consoleplayer, 0); + K_ToggleDirector(); + return true; +} + INT32 MR_PlaybackQuit(INT32 choice) { (void)choice; diff --git a/src/m_menu.h b/src/m_menu.h index 965c22033..d1bb05be3 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -326,6 +326,7 @@ INT32 MR_PlaybackAdvance(INT32 choice); INT32 MR_PlaybackSetViews(INT32 choice); INT32 MR_PlaybackAdjustView(INT32 choice); INT32 MR_PlaybackToggleFreecam(INT32 choice); +INT32 MR_PlaybackToggleDirector(INT32 choice); INT32 MR_PlaybackQuit(INT32 choice); INT32 MR_HandleImageDef(INT32 choice); INT32 MR_HandleMusicTest(INT32 choice);