- fixed Exhumed's ingame menu.

The bad setup here didn't let the menu's exit action pass to the game code, it still needed ugly workarounds.
This commit is contained in:
Christoph Oelckers 2020-03-01 16:32:41 +01:00
parent 2e8ace603b
commit 12af524dcc
3 changed files with 28 additions and 8 deletions

View file

@ -838,8 +838,18 @@ bool M_DoResponder (event_t *ev)
bool M_Responder(event_t* ev)
{
bool res = false;
// delayed deletion, so that self-deleting menus don't crash if they are getting accessed after being closed.
auto res = M_DoResponder(ev);
try
{
res = M_DoResponder(ev);
}
catch (...)
{
for (auto p : toDelete) delete p;
toDelete.Clear();
throw;
}
for (auto p : toDelete) delete p;
toDelete.Clear();
return res;

View file

@ -42,11 +42,9 @@ int handle1;
int MenuExitCondition;
int MenuStartCondition;
int menu_Menu(int nVal)
{
MenuStartCondition = nVal;
MenuExitCondition = -2;
M_StartControlPanel(false);
M_SetMenu(NAME_MainMenu);
@ -70,7 +68,9 @@ int menu_Menu(int nVal)
videoNextPage();
}
return MenuExitCondition;
int me = MenuExitCondition;
MenuExitCondition = -2;
return me;
}
@ -107,7 +107,13 @@ class PSMainMenu : public DListMenu
void PreDraw() override
{
menu_DoPlasma();
if (mDesc->mMenuName == NAME_MainMenu)
menu_DoPlasma();
else
{
auto nLogoTile = EXHUMED ? kExhumedLogo : kPowerslaveLogo;
overwritesprite(160, 40, nLogoTile, 32, 3, kPalNormal);
}
}
};

View file

@ -822,9 +822,12 @@ void timerhandler()
}
}
extern int MenuExitCondition;
void HandleAsync()
{
MenuExitCondition = -2;
handleevents();
}
int MyGetStringWidth(const char *str)
@ -2357,12 +2360,12 @@ GAMELOOP:
}
if (!bInDemo)
{
if (inputState.GetKeyStatus(sc_Escape))
nMenu = MenuExitCondition;
if (nMenu != -2)
{
inputState.ClearKeyStatus(sc_Escape);
MenuExitCondition = -2;
// MENU2:
bInMove = kTrue;
nMenu = menu_Menu(1);
switch (nMenu)
{
@ -2379,6 +2382,7 @@ GAMELOOP:
goto LOOP2;
case 3:
forcelevel = 0;
goto STARTGAME2;
case 6:
goto GAMELOOP;