diff options
| -rw-r--r-- | gamedata/engine.txt | 9 | ||||
| -rw-r--r-- | src/sst.c | 15 |
2 files changed, 17 insertions, 7 deletions
diff --git a/gamedata/engine.txt b/gamedata/engine.txt index f13a63a..511bcec 100644 --- a/gamedata/engine.txt +++ b/gamedata/engine.txt @@ -151,11 +151,10 @@ vtidx_GetPanel NVDTOR vtidx_VGuiConnect 3 + NVDTOR L4Dbased 4 + NVDTOR # ActivateGameUI added L4DS 5 + NVDTOR # some other crap added, god knows -vtidx_VGuiIsInitialized 6 + NVDTOR # this is also just called IsInitialized() - L4Dbased 7 + NVDTOR - L4DS 8 + NVDTOR - OE 5 + NVDTOR - #DMoMM 10 + NVDTOR # untested, can't remember where I got this... +vtidx_VGuiIsInitialized # this is also just called IsInitialized() + NE 6 + NVDTOR + L4Dbased 7 + NVDTOR + L4DS 8 + NVDTOR # CDedicatedServerAPI vtidx_RunFrame 7 @@ -395,8 +395,19 @@ static bool deferinit() { // Arbitrary check to infer whether we've been early- or late-loaded. // We used to just see whether gameui.dll/libgameui.so was loaded, but // Portal 2 does away with the separate gameui library, so now we just call - // CEngineVGui::IsInitialized() which works everywhere. - if (VGuiIsInitialized(vgui)) return false; + // CEngineVGui::IsInitialized() which works everywhere on NE. On OE (Windows + // only), we still do the GameUI check, because I was struggling to get the + // vgui check to work consistently (maybe I just had the wrong vtable index + // for IsInitialized?). TODO(opt): I guess it would be faster to do the + // virtual call if we can figure out how to make it work... + if_hot (has_vtidx_VGuiIsInitialized) { + if (VGuiIsInitialized(vgui)) return false; + } +#ifdef _WIN32 + else { + if (GetModuleHandleW(L"GameUI.dll")) return false; + } +#endif sst_earlyloaded = true; // let other code know if_cold (!os_mprot(vgui->vtable + vtidx_VGuiConnect, ssizeof(void *), PAGE_READWRITE)) { |
