diff --git a/src/menu/menu.cpp b/src/menu/menu.cpp index c64b057117..b2ceffc7a3 100644 --- a/src/menu/menu.cpp +++ b/src/menu/menu.cpp @@ -469,10 +469,15 @@ void M_SetMenu(FName menu, int param) const PClass *menuclass = PClass::FindClass(menu); if (menuclass != nullptr) { - if (menuclass->IsDescendantOf(RUNTIME_CLASS(DMenu))) + if (menuclass->IsDescendantOf("GenericMenu")) { DMenu *newmenu = (DMenu*)menuclass->CreateNew(); - newmenu->mParentMenu = CurrentMenu; + + IFVIRTUALPTRNAME(newmenu, "GenericMenu", Init) + { + VMValue params[3] = { newmenu, CurrentMenu }; + GlobalVMStack.Call(func, params, 2, nullptr, 0); + } M_ActivateMenu(newmenu); return; } diff --git a/wadsrc/static/zscript/menu/menu.txt b/wadsrc/static/zscript/menu/menu.txt index dda75a739f..84478ba818 100644 --- a/wadsrc/static/zscript/menu/menu.txt +++ b/wadsrc/static/zscript/menu/menu.txt @@ -296,3 +296,11 @@ class MenuDescriptor : Object native native static MenuDescriptor GetDescriptor(Name n); } +// This class is only needed to give it a virtual Init method that doesn't belong to Menu itself +class GenericMenu : Menu +{ + virtual void Init(Menu parent) + { + Super.Init(parent); + } +} \ No newline at end of file diff --git a/wadsrc/static/zscript/menu/readthis.txt b/wadsrc/static/zscript/menu/readthis.txt index a3db8a8a7d..604fb489e0 100644 --- a/wadsrc/static/zscript/menu/readthis.txt +++ b/wadsrc/static/zscript/menu/readthis.txt @@ -33,7 +33,7 @@ ** */ -class ReadThisMenu : Menu +class ReadThisMenu : GenericMenu { int mScreen; int mInfoTic; @@ -43,18 +43,19 @@ class ReadThisMenu : Menu // // //============================================================================= + + override void Init(Menu parent) + { + Super.Init(parent); + mScreen = 1; + mInfoTic = gametic; + } override void Drawer() { double alpha; TextureID tex, prevpic; - if (mScreen == 0) - { - mScreen = 1; - mInfoTic = gametic; - } - // Did the mapper choose a custom help page via MAPINFO? if (level.F1Pic.Length() != 0) {