- properly deal with 'gototitle'.

This commit is contained in:
Christoph Oelckers 2022-04-23 18:52:50 +02:00
parent 1aa71cc5a3
commit 7b59293995
3 changed files with 20 additions and 10 deletions

View file

@ -942,6 +942,13 @@ DIntermissionController* FLevelLocals::CreateIntermission()
void RunIntermission(DIntermissionController* intermissionScreen, DObject* statusScreen, std::function<void(bool)> completionf) void RunIntermission(DIntermissionController* intermissionScreen, DObject* statusScreen, std::function<void(bool)> completionf)
{ {
D_StartTitle();
if (!intermissionScreen && !statusScreen)
{
completionf(false);
return;
}
runner = CreateRunner(false); runner = CreateRunner(false);
GC::WriteBarrier(runner); GC::WriteBarrier(runner);
completion = std::move(completionf); completion = std::move(completionf);
@ -1010,9 +1017,9 @@ void G_DoCompleted (void)
bool endgame = intermissionScreen && intermissionScreen->mEndGame; bool endgame = intermissionScreen && intermissionScreen->mEndGame;
intermissionScreen = primaryLevel->CreateIntermission(); intermissionScreen = primaryLevel->CreateIntermission();
RunIntermission(intermissionScreen, statusScreen, [=](bool) RunIntermission(intermissionScreen, statusScreen, [=](bool)
{ {
if (!endgame) primaryLevel->WorldDone(); if (!endgame) primaryLevel->WorldDone();
else if (!intermissionScreen) D_StartTitle();
}); });
} }

View file

@ -872,9 +872,7 @@ again:
} }
else if (action->mClass == TITLE_ID) else if (action->mClass == TITLE_ID)
{ {
Destroy(); continue;
D_StartTitle ();
return false;
} }
else else
{ {
@ -1011,13 +1009,21 @@ DIntermissionController* F_StartIntermission(FIntermissionDescriptor *desc, bool
DIntermissionController* F_StartIntermission(FName seq) DIntermissionController* F_StartIntermission(FName seq)
{ {
FIntermissionDescriptor **pdesc = IntermissionDescriptors.CheckKey(seq); FIntermissionDescriptor **pdesc = IntermissionDescriptors.CheckKey(seq);
if (pdesc == nullptr) if (pdesc == nullptr || (*pdesc)->mActions.Size() == 0)
{ {
return nullptr; return nullptr;
} }
else else
{ {
return F_StartIntermission(*pdesc, false); auto desc = *pdesc;
auto action = desc->mActions[0];
if (action->mClass == TITLE_ID)
{
// is handled elsewhere.
return nullptr;
}
return F_StartIntermission(desc, false);
} }
} }

View file

@ -412,9 +412,6 @@ Intermission Inter_Underwater
{ {
Background = "E2END", 0 Background = "E2END", 0
} }
GotoTitle
{
}
} }
Intermission Inter_Demonscroll Intermission Inter_Demonscroll