diff --git a/src/g_game.c b/src/g_game.c index 0be648c30..bc99bdcf1 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -61,6 +61,7 @@ #include "k_specialstage.h" #include "k_bot.h" #include "doomstat.h" +#include "k_director.h" #ifdef HAVE_DISCORDRPC #include "discord.h" @@ -1210,6 +1211,28 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) goto aftercmdinput; } + if (displayplayers[forplayer] != g_localplayers[forplayer]) + { + if (M_MenuButtonPressed(forplayer, MBT_A)) + { + G_AdjustView(ssplayer, 1, true); + K_ToggleDirector(false); + } + + if (M_MenuButtonPressed(forplayer, MBT_X)) + { + G_AdjustView(ssplayer, -1, true); + K_ToggleDirector(false); + } + + if (M_MenuButtonPressed(forplayer, MBT_R)) + { + K_ToggleDirector(true); + } + + goto aftercmdinput; + } + if (K_PlayerUsesBotMovement(player)) { // Bot ticcmd is generated by K_BuildBotTiccmd @@ -1398,16 +1421,6 @@ aftercmdinput: cmd->throwdir = -KART_FULLTURN; G_DoAnglePrediction(cmd, realtics, ssplayer, player); - - // Reset away view if a command is given. - if ((cmd->forwardmove || cmd->buttons) - && !r_splitscreen && displayplayers[0] != consoleplayer && ssplayer == 1) - { - // Call ViewpointSwitch hooks here. - // The viewpoint was forcibly changed. - LUA_HookViewpointSwitch(player, &players[consoleplayer], true); - displayplayers[0] = consoleplayer; - } } ticcmd_t *G_CopyTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n) @@ -1740,44 +1753,8 @@ boolean G_Responder(event_t *ev) return true; // chat ate the event } - // allow spy mode changes even during the demo - if (gamestate == GS_LEVEL && ev->type == ev_keydown - && (ev->data1 == KEY_F12 /*|| ev->data1 == gamecontrol[0][gc_viewpoint][0] || ev->data1 == gamecontrol[0][gc_viewpoint][1]*/)) - { - if (!demo.playback && (r_splitscreen || !netgame)) - g_localplayers[0] = consoleplayer; - else - { - G_AdjustView(1, 1, true); - - // change statusbar also if playing back demo - if (demo.quitafterplaying) - ST_changeDemoView(); - - return true; - } - } - if (gamestate == GS_LEVEL && ev->type == ev_keydown && multiplayer && demo.playback && !demo.freecam) { - /* - if (ev->data1 == gamecontrol[1][gc_viewpoint][0] || ev->data1 == gamecontrol[1][gc_viewpoint][1]) - { - G_AdjustView(2, 1, true); - return true; - } - else if (ev->data1 == gamecontrol[2][gc_viewpoint][0] || ev->data1 == gamecontrol[2][gc_viewpoint][1]) - { - G_AdjustView(3, 1, true); - return true; - } - else if (ev->data1 == gamecontrol[3][gc_viewpoint][0] || ev->data1 == gamecontrol[3][gc_viewpoint][1]) - { - G_AdjustView(4, 1, true); - return true; - } - */ - // Allow pausing if ( //ev->data1 == gamecontrol[0][gc_pause][0] @@ -2071,6 +2048,10 @@ void G_ResetView(UINT8 viewnum, INT32 playernum, boolean onlyactive) if (viewnum == 1 && demo.playback) consoleplayer = displayplayers[0]; + + // change statusbar also if playing back demo + if (demo.quitafterplaying) + ST_changeDemoView(); } //