Mercurial > mm7
diff Game/GameMenu.cpp @ 2554:f2a8ed07e921
Game Main Menu separated from Game logic
author | a.parshin |
---|---|
date | Wed, 13 May 2015 11:31:58 +0200 |
parents | |
children | d87bfbd3bb3b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Game/GameMenu.cpp Wed May 13 11:31:58 2015 +0200 @@ -0,0 +1,637 @@ +#include "Engine/Engine.h" +#include "Engine/Timer.h" +#include "Engine/LOD.h" +#include "Engine/Party.h" +#include "Engine/SaveLoad.h" +#include "Engine/Registry.h" +#include "Engine/texts.h" +#include "Engine/Graphics/IRender.h" +#include "Engine/Graphics/Viewport.h" + +#include "IO/Keyboard.h" +#include "IO/Mouse.h" + +#include "GUI/UI/UIGame.h" +#include "GUI/UI/UISaveLoad.h" +#include "GUI/UI/UIModal.h" + +#include "Media/Audio/AudioPlayer.h" +#include "Media/Audio/AIL.h" + + + +extern void DoThatMessageThing(); + + +void Game_StartNewGameWhilePlaying(bool force_start) +{ + if (dword_6BE138 == 124 || force_start) + { + pIcons_LOD->SyncLoadedFilesCount(); + pIcons_LOD->RemoveTexturesPackFromTextureList(); + DoThatMessageThing(); + //pGUIWindow_CurrentMenu->Release(); + uGameState = GAME_STATE_NEWGAME_OUT_GAMEMENU; + current_screen_type = SCREEN_GAME; + viewparams->bRedrawGameUI = 1; + } + else + { + ShowStatusBarString(pGlobalTXT_LocalizationStrings[201], 2);// "Are you sure? Click again to start a New Game" + pAudioPlayer->PlaySound(SOUND_quest, 0, 0, -1, 0, 0, 0, 0); + dword_6BE138 = 124; + } +} + +void Game_QuitGameWhilePlaying(bool force_quit) +{ + if (dword_6BE138 == 132 || force_quit) + { + pIcons_LOD->SyncLoadedFilesCount(); + pIcons_LOD->RemoveTexturesPackFromTextureList(); + DoThatMessageThing(); + //pGUIWindow_CurrentMenu->Release(); + current_screen_type = SCREEN_GAME; + viewparams->bRedrawGameUI = 1; + pAudioPlayer->PlaySound(SOUND_WoodDoorClosing, 0, 0, -1, 0, 0, 0, 0); + uGameState = GAME_STATE_GAME_QUITTING_TO_MAIN_MENU; + } + else + { + ShowStatusBarString(pGlobalTXT_LocalizationStrings[82], 2);// "Are you sure? Click again to quit" + pAudioPlayer->PlaySound(SOUND_quest, 0, 0, -1, 0, 0, 0, 0); + dword_6BE138 = 132; + } +} + +void Game_OpenLoadGameDialog() +{ + pIcons_LOD->SyncLoadedFilesCount(); + pIcons_LOD->RemoveTexturesPackFromTextureList(); + + DoThatMessageThing(); + pGUIWindow_CurrentMenu->Release(); + pGUIWindow_CurrentMenu = nullptr; + + //LoadUI_Load(1); + current_screen_type = SCREEN_LOADGAME; + pGUIWindow_CurrentMenu = new GUIWindow_Load(true); +} + + + + +void GameMenu_EventLoop() +{ + while (pMessageQueue_50CBD0->uNumMessages) + { + UIMessageType msg; + int param, param2; + pMessageQueue_50CBD0->PopMessage(&msg, ¶m, ¶m2); + + switch (msg) + { + case UIMSG_StartNewGame: Game_StartNewGameWhilePlaying(param); continue; + case UIMSG_Quit: Game_QuitGameWhilePlaying(param); continue; + case UIMSG_Game_OpenLoadGameDialog: Game_OpenLoadGameDialog(); continue; + + case UIMSG_ArrowUp: + --pSaveListPosition; + if (pSaveListPosition < 0) + pSaveListPosition = 0; + new OnButtonClick2(215, 199, 17, 17, (int)pBtnArrowUp, 0); + continue; + + case UIMSG_DownArrow: + ++pSaveListPosition; + if (pSaveListPosition >= param) + pSaveListPosition = param - 1; + new OnButtonClick2(215, 323, 17, 17, (int)pBtnDownArrow, 0); + continue; + + case UIMSG_Cancel: + new OnCancel(350, 302, 106, 42, (int)pBtnCancel, 0); + continue; + + case UIMSG_SaveLoadBtn: + new OnSaveLoad(241, 302, 106, 42, (int)pBtnLoadSlot, 0); + continue; + case UIMSG_SelectLoadSlot: + { + if (pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) + pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); + + int v10 = pSaveListPosition + param; + if (current_screen_type != SCREEN_SAVEGAME || uLoadGameUI_SelectedSlot != v10) + { + if (dword_6BE138 == pSaveListPosition + param) + { + pMessageQueue_50CBD0->AddGUIMessage(UIMSG_SaveLoadBtn, 0, 0); + pMessageQueue_50CBD0->AddGUIMessage(UIMSG_LoadGame, 0, 0); + } + uLoadGameUI_SelectedSlot = v10; + dword_6BE138 = v10; + } + else + { + pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu); + if (strcmp(pSavegameHeader[uLoadGameUI_SelectedSlot].pName, pGlobalTXT_LocalizationStrings[72]))// "Empty" + strcpy(pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName); + pKeyActionMap->uNumKeysPressed = strlen(pKeyActionMap->pPressedKeysBuffer); + } + } + continue; + case UIMSG_LoadGame: + if (pSavegameUsedSlots[uLoadGameUI_SelectedSlot]) + { + LoadGame(uLoadGameUI_SelectedSlot); + uGameState = GAME_STATE_LOADING_GAME; + } + continue; + case UIMSG_SaveGame: + if (pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) + { + pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); + strcpy((char *)&pSavegameHeader[uLoadGameUI_SelectedSlot], pKeyActionMap->pPressedKeysBuffer); + } + DoSavegame(uLoadGameUI_SelectedSlot); + continue; + case UIMSG_Game_OpenSaveGameDialog: + { + pGUIWindow_CurrentMenu->Release(); + + current_screen_type = SCREEN_SAVEGAME; + pGUIWindow_CurrentMenu = new GUIWindow_Save(); //SaveUI_Load(current_screen_type = SCREEN_SAVEGAME); + continue; + } + case UIMSG_Game_OpenOptionsDialog://Open + { + DoThatMessageThing(); + + pGUIWindow_CurrentMenu->Release(); + pGUIWindow_CurrentMenu = new GUIWindow_GameOptions();//GameMenuUI_Options_Load(); + + viewparams->field_48 = 1; + current_screen_type = SCREEN_OPTIONS; + + continue; + } + + case UIMSG_OpenKeyMappingOptions://Open + { + DoThatMessageThing(); + + pGUIWindow_CurrentMenu->Release(); + pGUIWindow_CurrentMenu = new GUIWindow_GameKeyBindings();//GameMenuUI_OptionsKeymapping_Load(); + + viewparams->field_48 = 1; + current_screen_type = SCREEN_KEYBOARD_OPTIONS; + + continue; + } + + case UIMSG_ChangeKeyButton: + { + if (uGameMenuUI_CurentlySelectedKeyIdx != -1) + { + pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0); + } + else + { + uGameMenuUI_CurentlySelectedKeyIdx = param; + if (KeyboardPageNum != 1) + uGameMenuUI_CurentlySelectedKeyIdx += 14; + pKeyActionMap->EnterText(0, 1, pGUIWindow_CurrentMenu); + } + continue; + } + + case UIMSG_ResetKeyMapping: + { + int v197 = 1; + pKeyActionMap->SetDefaultMapping(); + for (uint i = 0; i < 28; i++) + { + if (pKeyActionMap->GetActionVKey((enum InputAction)i) != pPrevVirtualCidesMapping[i]) + { + if (v197) + { + GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[i]), pKeyActionMap->GetActionVKey((enum InputAction)i), 1); + v197 = 0; + } + else + GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[i]), pKeyActionMap->GetActionVKey((enum InputAction)i), 0); + } + pPrevVirtualCidesMapping[i] = pKeyActionMap->GetActionVKey((enum InputAction)i); + GameMenuUI_InvaligKeyBindingsFlags[i] = false; + } + pAudioPlayer->PlaySound(SOUND_chimes, 0, 0, -1, 0, 0, 0, 0); + continue; + } + + case UIMSG_SelectKeyPage1: + KeyboardPageNum = 1; + continue; + case UIMSG_SelectKeyPage2: + KeyboardPageNum = 2; + continue; + + case UIMSG_OpenVideoOptions: + { + DoThatMessageThing(); + + pGUIWindow_CurrentMenu->Release(); + pGUIWindow_CurrentMenu = new GUIWindow_GameVideoOptions();//GameMenuUI_OptionsVideo_Load(); + viewparams->field_48 = 1; + current_screen_type = SCREEN_VIDEO_OPTIONS; + + continue; + } + + case UIMSG_1A9: + __debugbreak(); + if (param == 4) + { + //--uGammaPos; + if ((uGammaPos-- - 1) < 0) + { + uGammaPos = 0; + pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0); + continue; + } + double v19 = (double)(signed int)uGammaPos * 0.1 + 0.6; + //pEngine->pGammaController->Initialize(v19); + new OnButtonClick2(21, 161, 0, 0, (int)pBtn_SliderLeft, (char *)1); + pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0); + continue; + } + if (param == 5) + { + ++uGammaPos; + if ((signed int)uGammaPos <= 9) + { + double v21 = (double)(signed int)uGammaPos * 0.1 + 0.6; + //pEngine->pGammaController->Initialize(v21); + new OnButtonClick2(213, 161, 0, 0, (int)pBtn_SliderRight, (char *)1); + pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0); + continue; + } + uGammaPos = 9; + } + else + { + POINT a2; + uGammaPos = (pMouse->GetCursorPos(&a2)->x - 42) / 17; + double v22 = (double)(signed int)uGammaPos * 0.1 + 0.6; + //pEngine->pGammaController->Initialize(v22); + } + pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0); + continue; + case UIMSG_ToggleBloodsplats: + pEngine->ToggleFlags2(0x20u); + continue; + case UIMSG_ToggleColoredLights: + pRenderer->ToggleColoredLights(); + continue; + case UIMSG_ToggleTint: + pRenderer->ToggleTint(); + continue; + case UIMSG_ChangeMusicVolume: + extern bool use_music_folder; + if (param == 4)//- + { + --uMusicVolimeMultiplier; + if ((char)uMusicVolimeMultiplier < 1) + uMusicVolimeMultiplier = 0; + new OnButtonClick2(243, 216, 0, 0, (int)pBtn_SliderLeft, (char *)1); + if (uMusicVolimeMultiplier) + pAudioPlayer->PlaySound(SOUND_hurp, -1, 0, -1, 0, 0, pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f, 0); + + if (use_music_folder) + alSourcef(mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]); + else + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); + + continue; + } + if (param == 5)//+ + { + ++uMusicVolimeMultiplier; + if ((char)uMusicVolimeMultiplier > 9) + uMusicVolimeMultiplier = 9; + new OnButtonClick2(435, 216, 0, 0, (int)pBtn_SliderRight, (char *)1); + if (uMusicVolimeMultiplier) + pAudioPlayer->PlaySound(SOUND_hurp, -1, 0, -1, 0, 0, pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f, 0); + if (use_music_folder) + alSourcef(mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]); + else + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); + continue; + } + + POINT v202; + uMusicVolimeMultiplier = (pMouse->GetCursorPos(&v202)->x - 263) / 17;//for mouse + if ((char)uMusicVolimeMultiplier > 9) + uMusicVolimeMultiplier = 9; + if (uMusicVolimeMultiplier) + pAudioPlayer->PlaySound(SOUND_hurp, -1, 0, -1, 0, 0, pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f, 0); + if (use_music_folder) + alSourcef(mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]); + else + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); + continue; + case UIMSG_ChangeSoundVolume: + if (param == 4)//reduce sound level button left + { + --uSoundVolumeMultiplier; + if ((char)uSoundVolumeMultiplier < 1) + uSoundVolumeMultiplier = 0; + new OnButtonClick2(243, 162, 0, 0, (int)pBtn_SliderLeft, (char *)1); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); + pAudioPlayer->PlaySound(SOUND_church, -1, 0, -1, 0, 0, 0, 0); + int v = AIL_redbook_volume(pAudioPlayer->hAILRedbook); + //v = v+1; + if (v) + __debugbreak(); + continue; + } + if (param == 5)//Increase sound level button right + { + ++uSoundVolumeMultiplier; + if ((char)uSoundVolumeMultiplier > 8) + uSoundVolumeMultiplier = 9; + //v168 = 1; + //v154 = (int)pBtn_SliderRight; + new OnButtonClick2(435, 162, 0, 0, (int)pBtn_SliderRight, (char *)1); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); + pAudioPlayer->PlaySound(SOUND_church, -1, 0, -1, 0, 0, 0, 0); + continue; + } + + POINT v207; + uSoundVolumeMultiplier = (pMouse->GetCursorPos(&v207)->x - 263) / 17; + if ((char)uSoundVolumeMultiplier > 8) + uSoundVolumeMultiplier = 9; + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); + pAudioPlayer->PlaySound(SOUND_church, -1, 0, -1, 0, 0, 0, 0); + continue; + case UIMSG_ToggleFlipOnExit: + bFlipOnExit = bFlipOnExit == 0; + continue; + case UIMSG_ToggleAlwaysRun: + bAlwaysRun = bAlwaysRun == 0; + continue; + case UIMSG_ToggleWalkSound: + bWalkSound = bWalkSound == 0; + continue; + case UIMSG_ToggleShowDamage: + bShowDamage = bShowDamage == 0; + continue; + case UIMSG_ChangeVoiceVolume: + if (param == 4) + { + --uVoicesVolumeMultiplier; + if ((char)uVoicesVolumeMultiplier < 1) + uVoicesVolumeMultiplier = 0; + new OnButtonClick2(243, 270, 0, 0, (int)pBtn_SliderLeft, (char *)1); + if (!uVoicesVolumeMultiplier) + continue; + pAudioPlayer->PlaySound(SOUND_hf445a, -1, 0, -1, 0, 0, pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f, 0); + continue; + } + if (param == 5) + { + ++uVoicesVolumeMultiplier; + if ((char)uVoicesVolumeMultiplier > 8) + uVoicesVolumeMultiplier = 9; + new OnButtonClick2(435, 270, 0, 0, (int)pBtn_SliderRight, (char *)1); + if (!uVoicesVolumeMultiplier) + continue; + pAudioPlayer->PlaySound(SOUND_hf445a, -1, 0, -1, 0, 0, pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f, 0); + continue; + } + + POINT v205; + uVoicesVolumeMultiplier = (pMouse->GetCursorPos(&v205)->x - 263) / 17; + if ((char)uVoicesVolumeMultiplier > 8) + uVoicesVolumeMultiplier = 9; + if (!uVoicesVolumeMultiplier) + continue; + pAudioPlayer->PlaySound(SOUND_hf445a, -1, 0, -1, 0, 0, pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f, 0); + continue; + case UIMSG_SetTurnSpeed: + if (param) + pParty->sRotationY = param * pParty->sRotationY / param; + uTurnSpeed = param; + continue; + + case UIMSG_SetGraphicsMode: + //if ( !bUseLoResSprites ) + //{ + // byte_6BE388_graphicsmode = uMessageParam; + // MM7Initialization(); + // continue; + //} + //if ( uMessageParam ) + //{ + // if ( uMessageParam == 1 ) + // { + // byte_6BE388_graphicsmode = 0; + // } + // else + // { + // if ( uMessageParam != 2 ) + // continue; + // byte_6BE388_graphicsmode = 1; + // } + // MM7Initialization(); + // continue; + //} + pModalWindow = new GUIWindow_Modal(pNPCTopics[453].pText, UIMSG_0); + __debugbreak(); // Nomad: graphicsmode as it was now removed + continue; + + case UIMSG_GameMenu_ReturnToGame: + //pGUIWindow_CurrentMenu->Release(); + pEventTimer->Resume(); + current_screen_type = SCREEN_GAME; + viewparams->bRedrawGameUI = true; + continue; + + + + + case UIMSG_Escape: + if (pModalWindow) + { + pModalWindow->Release(); + pModalWindow = nullptr; + continue; + } + pRenderer->ClearZBuffer(0, 479); + viewparams->bRedrawGameUI = true; + viewparams->field_48 = 1; + + if (current_screen_type == SCREEN_MENU) + { + pIcons_LOD->SyncLoadedFilesCount(); + pIcons_LOD->RemoveTexturesPackFromTextureList(); + pIcons_LOD->SyncLoadedFilesCount(); + pIcons_LOD->RemoveTexturesPackFromTextureList(); + + current_screen_type = SCREEN_GAME; + } + else if (current_screen_type == SCREEN_SAVEGAME || current_screen_type == SCREEN_LOADGAME) + { + pIcons_LOD->RemoveTexturesPackFromTextureList(); + //crt_deconstruct_ptr_6A0118(); + + pGUIWindow_CurrentMenu->Release(); + current_screen_type = SCREEN_MENU; + pGUIWindow_CurrentMenu = new GUIWindow_GameMenu(); + } + else if (current_screen_type == SCREEN_OPTIONS) + { + options_menu_skin.Relaease(); + pIcons_LOD->SyncLoadedFilesCount(); + WriteWindowsRegistryInt("soundflag", (char)uSoundVolumeMultiplier); + WriteWindowsRegistryInt("musicflag", (char)uMusicVolimeMultiplier); + WriteWindowsRegistryInt("CharVoices", (char)uVoicesVolumeMultiplier); + WriteWindowsRegistryInt("WalkSound", bWalkSound); + WriteWindowsRegistryInt("ShowDamage", bShowDamage); + //WriteWindowsRegistryInt("graphicsmode", (unsigned __int8)byte_6BE388_graphicsmode); + WriteWindowsRegistryInt("valAlwaysRun", bAlwaysRun); + WriteWindowsRegistryInt("FlipOnExit", bFlipOnExit); + if (!uTurnSpeed) + WriteWindowsRegistryInt("TurnDelta", 3); + else if (uTurnSpeed == 64) + WriteWindowsRegistryInt("TurnDelta", 2); + else if (uTurnSpeed == 128) + WriteWindowsRegistryInt("TurnDelta", 1); + + pGUIWindow_CurrentMenu->Release(); + current_screen_type = SCREEN_MENU; + pGUIWindow_CurrentMenu = new GUIWindow_GameMenu(); + } + else if (current_screen_type == SCREEN_VIDEO_OPTIONS) + { + //if ( pRenderer->pRenderD3D ) + { + WriteWindowsRegistryInt("Colored Lights", pRenderer->bUseColoredLights); + WriteWindowsRegistryInt("Tinting", pRenderer->bTinting); + WriteWindowsRegistryInt("Bloodsplats", (LOBYTE(pEngine->uFlags2) >> 5) & 1); + } + + pGUIWindow_CurrentMenu->Release(); + current_screen_type = SCREEN_MENU; + pGUIWindow_CurrentMenu = new GUIWindow_GameMenu(); + } + else if (current_screen_type == SCREEN_KEYBOARD_OPTIONS) + { + KeyToggleType pKeyToggleType; // [sp+0h] [bp-5FCh]@287 + int v197 = 1; + bool pKeyBindingFlag = false; + + for (uint i = 0; i < 28; ++i) + { + if (GameMenuUI_InvaligKeyBindingsFlags[i]) + pKeyBindingFlag = true; + } + if (!pKeyBindingFlag) + { + for (uint i = 0; i < 5; i++) + { + if (uTextureID_Optkb[i]) + pIcons_LOD->pTextures[uTextureID_Optkb[i]].Release(); + } + memset(uTextureID_Optkb.data(), 0, 20); + pIcons_LOD->SyncLoadedFilesCount(); + for (uint i = 0; i < 28; ++i) + { + if (pKeyActionMap->GetActionVKey((enum InputAction)i) != pPrevVirtualCidesMapping[i]) + { + if (v197) + { + GUI_ReplaceHotkey(pKeyActionMap->GetActionVKey((enum InputAction)i), LOBYTE(pPrevVirtualCidesMapping[i]), 1); + v197 = 0; + } + else + GUI_ReplaceHotkey(pKeyActionMap->GetActionVKey((enum InputAction)i), LOBYTE(pPrevVirtualCidesMapping[i]), 0); + } + if (i > 3 && i != 25 && i != 26) + pKeyToggleType = TOGGLE_OneTimePress; + else + pKeyToggleType = TOGGLE_Continuously; + pKeyActionMap->SetKeyMapping(i, pPrevVirtualCidesMapping[i], pKeyToggleType); + } + pKeyActionMap->StoreMappings(); + } + else + pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0); + + pGUIWindow_CurrentMenu->Release(); + current_screen_type = SCREEN_MENU; + pGUIWindow_CurrentMenu = new GUIWindow_GameMenu(); + } + continue; + } + } +} + +void GameMenu_Loop() +{ + pEventTimer->Pause(); + pAudioPlayer->StopChannels(-1, -1); + current_screen_type = SCREEN_MENU; + + ++pIcons_LOD->uTexturePacksCount; + if (!pIcons_LOD->uNumPrevLoadedFiles) + pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; + + pGUIWindow_CurrentMenu = new GUIWindow_GameMenu(); + + viewparams->field_48 = 1; + + stru_506E40.Release(); + pRenderer->SaveScreenshot("gamma.pcx", 155, 117); + stru_506E40.LoadPCXFile("gamma.pcx", 0); + + while (uGameState == GAME_STATE_PLAYING + && ( + current_screen_type == SCREEN_MENU + || current_screen_type == SCREEN_SAVEGAME + || current_screen_type == SCREEN_LOADGAME + || current_screen_type == SCREEN_OPTIONS + || current_screen_type == SCREEN_VIDEO_OPTIONS + || current_screen_type == SCREEN_KEYBOARD_OPTIONS + ) + ) + { + MSG msg; + while (PeekMessageW(&msg, 0, 0, 0, PM_REMOVE)) + { + if (msg.message == WM_QUIT) + Engine_DeinitializeAndTerminate(0); + TranslateMessage(&msg); + DispatchMessageW(&msg); + } + if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) + { + WaitMessage(); + continue; + } + + pRenderer->BeginScene(); + { + GameMenu_EventLoop(); + GUI_UpdateWindows(); + } + pRenderer->EndScene(); + pRenderer->Present(); + } + + pGUIWindow_CurrentMenu->Release(); + pGUIWindow_CurrentMenu = nullptr; + + stru_506E40.Release(); +} \ No newline at end of file