diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 18eca9556..a02b24c03 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5248,6 +5248,24 @@ static void K_drawInput(void) char mode = ((stplyr->pflags & PF_ANALOGSTICK) ? '4' : '2') + (r_splitscreen > 1); bool local = !demo.playback && P_IsMachineLocalPlayer(stplyr); fixed_t slide = K_GetDialogueSlide(FRACUNIT); + INT32 tallySlide = [] + { + if (r_splitscreen <= 1) + { + return 0; + } + if (!stplyr->tally.active) + { + return 0; + } + constexpr INT32 kSlideDown = 22; + if (stplyr->tally.state == TALLY_ST_GOTTHRU_SLIDEIN || + stplyr->tally.state == TALLY_ST_GAMEOVER_SLIDEIN) + { + return Easing_OutQuad(std::min(stplyr->tally.transition * 2, FRACUNIT), 0, kSlideDown); + } + return kSlideDown; + }(); if (slide) flags &= ~(V_SNAPTORIGHT); // don't draw underneath the dialogue box in non-green resolutions @@ -5264,7 +5282,7 @@ static void K_drawInput(void) K_DrawInputDisplay( def[k][0] - FixedToFloat(34 * slide), - def[k][1] - FixedToFloat(51 * slide), + def[k][1] - FixedToFloat(51 * slide) + tallySlide, flags, mode, (local ? G_LocalSplitscreenPartyPosition : G_PartyPosition)(stplyr - players), diff --git a/src/p_user.c b/src/p_user.c index b6257b047..78cbf67b1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1328,8 +1328,19 @@ void P_DoPlayerExit(player_t *player, pflags_t flags) } } - if (!demo.savebutton && P_IsMachineLocalPlayer(player)) - demo.savebutton = leveltime; + if (!demo.savebutton) + { + UINT8 outstanding = splitscreen + 1; + for (UINT8 i = 0; i <= splitscreen; ++i) + { + if (players[g_localplayers[i]].exiting) + outstanding--; + } + // Once the entire local party finishes (not + // online party), show the "Save Replay" button. + if (!outstanding) + demo.savebutton = leveltime; + } } }