view Game/MainMenu.cpp @ 2544:c674d547cc7c

GUIWindow switch logic refactored into behaviour classes
author a.parshin
date Mon, 11 May 2015 09:51:04 +0200
parents a902abdfc7f2
children fed97f15d1e1
line wrap: on
line source

#include "Engine/Engine.h"
#include "Engine/Timer.h"
#include "Engine/Party.h"
#include "Engine/LOD.h"
#include "Engine/SaveLoad.h"
#include "Engine/Graphics/IRender.h"
#include "Engine/Graphics/Viewport.h"

#include "IO/Mouse.h"
#include "IO/Keyboard.h"

#include "GUI/GUIWindow.h"
#include "GUI/GUIButton.h"
#include "GUI/UI/UIPartyCreation.h"

#include "Media/Audio/AudioPlayer.h"

#include "Game/MainMenu.h"


GUIButton *pMainMenu_BtnExit = nullptr;
GUIButton *pMainMenu_BtnCredits = nullptr;
GUIButton *pMainMenu_BtnLoad = nullptr;
GUIButton *pMainMenu_BtnNew = nullptr;

RGBTexture main_menu_background;



//----- (00435748) --------------------------------------------------------
void MainMenu_EventLoop()
{
    Player *pPlayer; // ebx@2
    void *v3; // edi@21
    signed int v4; // eax@29
    //  int v5; // ecx@29
    //  PLAYER_SKILL_TYPE v6; // edi@37
    GUIWindow *pWindow; // eax@56
    GUIButton *pButton; // eax@59
    int v15; // edi@70
    char v20; // dl@116
    unsigned int v21; // eax@116
    unsigned int v25; // eax@120
    unsigned int v26; // ecx@127
    //  SoundID pSoundID; // [sp-2Ch] [bp-3Ch]@36
    //  signed int v41; // [sp-10h] [bp-20h]@29
    int pParam; // [sp+4h] [bp-Ch]@3
    UIMessageType pUIMessageType; // [sp+8h] [bp-8h]@3
    int pSex; // [sp+Ch] [bp-4h]@3

    if (pMessageQueue_50CBD0->uNumMessages)
    {
        pPlayer = pParty->pPlayers.data();
        do
        {
            int param2;
            pMessageQueue_50CBD0->PopMessage(&pUIMessageType, &pParam, &param2);
            //auto player = &pParty->pPlayers[pParam];

            switch (pUIMessageType) // For buttons of window MainMenu
            {
            case UIMSG_MainMenu_ShowPartyCreationWnd:
                new OnButtonClick2(495, 172, 0, 0, (int)pMainMenu_BtnNew, 0);
                SetCurrentMenuID(MENU_NEWGAME);
                break;
            case UIMSG_MainMenu_ShowLoadWindow:
                new OnButtonClick2(495, 227, 0, 0, (int)pMainMenu_BtnLoad, 0);
                SetCurrentMenuID(MENU_SAVELOAD);
                break;
            case UIMSG_ShowCredits:
                new OnButtonClick2(495, 282, 0, 0, (int)pMainMenu_BtnCredits, 0);
                SetCurrentMenuID(MENU_CREDITS);
                break;
            case UIMSG_ExitToWindows:
                new OnButtonClick2(495, 337, 0, 0, (int)pMainMenu_BtnExit, 0);
                SetCurrentMenuID(MENU_EXIT_GAME);
                break;
            case UIMSG_PlayerCreation_SelectAttribute:
                pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                    % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
                uPlayerCreationUI_SelectedCharacter = pParam;
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
                break;
            case UIMSG_PlayerCreation_VoicePrev:
                pSex = pParty->pPlayers[pParam].GetSexByVoice();
                do
                {
                    if (pParty->pPlayers[pParam].uVoiceID == 0)
                        pParty->pPlayers[pParam].uVoiceID = 19;
                    else --pParty->pPlayers[pParam].uVoiceID;
                } while (pParty->pPlayers[pParam].GetSexByVoice() != pSex);
                pButton = pCreationUI_BtnPressLeft2[pParam];
                new OnButtonClick(pButton->uX, pButton->uY, 0, 0, (int)pButton, (char *)1);
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
                pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0);
                break;
            case UIMSG_PlayerCreation_VoiceNext:
                pSex = pParty->pPlayers[pParam].GetSexByVoice();
                do
                {
                    pParty->pPlayers[pParam].uVoiceID = (pParty->pPlayers[pParam].uVoiceID + 1) % 20;
                } while (pParty->pPlayers[pParam].GetSexByVoice() != pSex);
                pButton = pCreationUI_BtnPressRight2[pParam];
                new OnButtonClick(pButton->uX, pButton->uY, 0, 0, (int)pButton, (char *)1);
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
                pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0);
                break;
            case UIMSG_PlayerCreation_FacePrev:
                //pPlayer = &pParty->pPlayers[pParam];
                if (!pParty->pPlayers[pParam].uCurrentFace)
                    pParty->pPlayers[pParam].uCurrentFace = 19;
                else
                    pParty->pPlayers[pParam].uCurrentFace -= 1;
                pParty->pPlayers[pParam].uVoiceID = pParty->pPlayers[pParam].uCurrentFace;
                pParty->pPlayers[pParam].SetInitialStats();
                pParty->pPlayers[pParam].SetSexByVoice();
                pParty->pPlayers[pParam].RandomizeName();
                v25 = pParam;
                pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                    % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
                uPlayerCreationUI_SelectedCharacter = v25;
                new OnButtonClick(pCreationUI_BtnPressLeft[v25]->uX, pCreationUI_BtnPressLeft[v25]->uY, 0, 0, (int)pCreationUI_BtnPressLeft[v25], (char *)1);
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0.0, 0);
                pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0);
                break;
            case UIMSG_PlayerCreation_FaceNext:
                //pPlayer = &pParty->pPlayers[pParam];
                v20 = (char)((int)pParty->pPlayers[pParam].uCurrentFace + 1) % 20;
                pParty->pPlayers[pParam].uCurrentFace = v20;
                pParty->pPlayers[pParam].uVoiceID = v20;
                pParty->pPlayers[pParam].SetInitialStats();
                pParty->pPlayers[pParam].SetSexByVoice();
                pParty->pPlayers[pParam].RandomizeName();
                v21 = pParam;
                pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                    % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
                uPlayerCreationUI_SelectedCharacter = v21;
                new OnButtonClick(pCreationUI_BtnPressRight[v21]->uX, pCreationUI_BtnPressRight[v21]->uY, 0, 0, (int)pCreationUI_BtnPressRight[v21], (char *)1);
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
                pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0);
                break;
            case UIMSG_PlayerCreationClickPlus:
                new OnButtonClick2(613, 393, 0, 0, (int)pPlayerCreationUI_BtnPlus, (char *)1);
                pPlayer[uPlayerCreationUI_SelectedCharacter].IncreaseAttribute((pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
                pAudioPlayer->PlaySound(SOUND_ClickMinus, 0, 0, -1, 0, 0, 0, 0);
                break;
            case UIMSG_PlayerCreationClickMinus:
                new OnButtonClick2(523, 393, 0, 0, (int)pPlayerCreationUI_BtnMinus, (char *)1);
                pPlayer[uPlayerCreationUI_SelectedCharacter].DecreaseAttribute((pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
                pAudioPlayer->PlaySound(SOUND_ClickPlus, 0, 0, -1, 0, 0, 0, 0);
                break;
            case UIMSG_PlayerCreationSelectActiveSkill:
                if (pPlayer[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(3) == 37)
                    pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].pActiveSkills[pPlayer[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(pParam + 4)] = 1;
                pAudioPlayer->PlaySound(SOUND_ClickSkill, 0, 0, -1, 0, 0, 0, 0);
                break;
            case UIMSG_PlayerCreationSelectClass:
                pPlayer[uPlayerCreationUI_SelectedCharacter].Reset((PLAYER_CLASS_TYPE)pParam);
                pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
                break;
            case UIMSG_PlayerCreationClickOK:
                new OnButtonClick2(580, 431, 0, 0, (int)pPlayerCreationUI_BtnOK, 0);
                if (PlayerCreation_GetUnspentAttributePointCount() || !PlayerCreation_Choose4Skills())
                    GameUI_Footer_TimeLeft = GetTickCount() + 4000;
                else
                    uGameState = GAME_STATE_STARTING_NEW_GAME;
                break;
            case UIMSG_PlayerCreationClickReset:
                new OnButtonClick2(527, 431, 0, 0, (int)pPlayerCreationUI_BtnReset, 0);
                pParty->Reset();
                break;
            case UIMSG_PlayerCreationRemoveUpSkill:
                v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem;
                pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v4 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
                if (pPlayer[pParam].GetSkillIdxByOrder(2) != 37)//37 - None(Нет)
                    pParty->pPlayers[pParam].pActiveSkills[pPlayer[pParam].GetSkillIdxByOrder(2)] = 0;
                break;
            case UIMSG_PlayerCreationRemoveDownSkill:
                v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem;
                pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v4 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
                if (pPlayer[pParam].GetSkillIdxByOrder(3) != 37)//37 - None(Нет)
                    pParty->pPlayers[pParam].pActiveSkills[pPlayer[pParam].GetSkillIdxByOrder(3)] = 0;
                break;
            case UIMSG_PlayerCreationChangeName:
                pAudioPlayer->PlaySound(SOUND_ClickSkill, 0, 0, -1, 0, 0, 0, 0);
                v3 = (void *)pParam;
                uPlayerCreationUI_SelectedCharacter = pParam;
                pKeyActionMap->EnterText(0, 15, pGUIWindow_CurrentMenu);
                pGUIWindow_CurrentMenu->ptr_1C = v3;
                break;
            case UIMSG_ChangeGameState:
                uGameState = GAME_FINISHED;
                break;
            case UIMSG_ChangeCursor:
                pMouse->SetCursorBitmap("MICON2");
                break;
            case UIMSG_3A:
                SetCurrentMenuID(MENU_DebugBLVLevel);
                break;
            case UIMSG_LoadGame:
                if (!pSavegameUsedSlots[uLoadGameUI_SelectedSlot])
                    break;
                SetCurrentMenuID(MENU_LoadingProcInMainMenu);
                break;
            case UIMSG_SelectLoadSlot:
                //main menu save/load wnd   clicking on savegame lines
                if (pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS)
                    pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE);
                if (current_screen_type != SCREEN_SAVEGAME || uLoadGameUI_SelectedSlot != pParam + pSaveListPosition)
                {
                    //load clicked line
                    v26 = pParam + pSaveListPosition;
                    if (dword_6BE138 == pParam + pSaveListPosition)
                    {
                        pMessageQueue_50CBD0->AddGUIMessage(UIMSG_SaveLoadBtn, 0, 0);
                        pMessageQueue_50CBD0->AddGUIMessage(UIMSG_LoadGame, 0, 0);
                    }
                    uLoadGameUI_SelectedSlot = v26;
                    dword_6BE138 = v26;
                }
                else
                {
                    //typing in the line
                    pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu);
                    strcpy(pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName);
                    pKeyActionMap->uNumKeysPressed = strlen(pKeyActionMap->pPressedKeysBuffer);
                }
                break;
            case UIMSG_SaveLoadBtn:
                new OnSaveLoad(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, (int)pBtnLoadSlot, 0);
                break;
            case UIMSG_DownArrow:
                ++pSaveListPosition;
                if (pSaveListPosition >= pParam)
                    pSaveListPosition = pParam - 1;
                if (pSaveListPosition < 1)
                    pSaveListPosition = 0;
                pWindow = pGUIWindow_CurrentMenu;
                new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 323, 0, 0, (int)pBtnDownArrow, 0);
                break;
            case UIMSG_Cancel:
                new OnCancel3(pGUIWindow_CurrentMenu->uFrameX + 350, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, (int)pBtnCancel, 0);
                break;
            case UIMSG_ArrowUp:
                --pSaveListPosition;
                if (pSaveListPosition < 0)
                    pSaveListPosition = 0;
                pWindow = pGUIWindow_CurrentMenu;
                new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 197, 0, 0, (int)pBtnArrowUp, 0);
                break;
            case UIMSG_AD:
                new OnButtonClick2(pMainMenu_BtnNew->uX, pMainMenu_BtnNew->uY, 0, 0, (int)pMainMenu_BtnNew, 0);
                SetCurrentMenuID(MENU_LoadingProcInMainMenu);
                break;
            case UIMSG_AE:
                new OnButtonClick2(pMainMenu_BtnExit->uX, pMainMenu_BtnExit->uY, 0, 0, (int)pMainMenu_BtnExit, 0);
                SetCurrentMenuID(MENU_DebugBLVLevel);
                break;
            case UIMSG_Escape:
                if (pModalWindow)
                {
                    ModalWindow_Release();
                    break;
                }
                if (!(dword_6BE364_game_settings_1 & GAME_SETTINGS_4000))
                    break;
                v15 = 1;
                pMediaPlayer->bStopBeforeSchedule = 1;
                viewparams->bRedrawGameUI = 1;
                viewparams->field_48 = 1;
                if (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_MMT_MAIN_MENU
                    || GetCurrentMenuID() == MENU_CREATEPARTY || GetCurrentMenuID() == MENU_NAMEPANELESC)
                {
                    //if ( current_screen_type == SCREEN_VIDEO )
                    //pVideoPlayer->FastForwardToFrame(pVideoPlayer->pResetflag);			  
                    if (GetCurrentMenuID() == MENU_NAMEPANELESC)  //из панели изменения имени
                    {
                        SetCurrentMenuID(MENU_CREATEPARTY);//в окно создания группы
                        break;
                    }
                    if (GetCurrentMenuID() == MENU_CREDITSPROC)	//из окна Создатели
                    {
                        SetCurrentMenuID(MENU_CREDITSCLOSE);//в закрытие Создатели
                        break;
                    }
                    pMessageQueue_50CBD0->AddGUIMessage(UIMSG_ChangeGameState, 0, 0);
                    break;
                }
                if (GetCurrentMenuID() == MENU_CREDITSPROC && !current_screen_type)
                {
                    //if ( current_screen_type == SCREEN_VIDEO )
                    //pVideoPlayer->FastForwardToFrame(pVideoPlayer->pResetflag);
                    if (GetCurrentMenuID() == MENU_NAMEPANELESC)
                    {
                        SetCurrentMenuID(MENU_CREATEPARTY);
                        break;
                    }
                    if (GetCurrentMenuID() == MENU_CREDITSPROC)
                    {
                        SetCurrentMenuID(MENU_CREDITSCLOSE);
                        break;
                    }
                    pMessageQueue_50CBD0->AddGUIMessage(UIMSG_ChangeGameState, 0, 0);
                    break;
                }
                if (current_screen_type == SCREEN_LOADGAME)
                {
                    pIcons_LOD->RemoveTexturesPackFromTextureList();
                    //crt_deconstruct_ptr_6A0118();
                    main_menu_background.Release();
                    main_menu_background.Load("title.pcx", 0);
                    SetCurrentMenuID(MENU_MAIN);
                    v15 = 1;
                    pGUIWindow_CurrentMenu->Release();
                    pGUIWindow2->Release();
                    pGUIWindow2 = 0;
                    pEventTimer->Resume();
                    current_screen_type = SCREEN_GAME;
                    viewparams->bRedrawGameUI = v15;
                    break;
                }
                if (current_screen_type == SCREEN_VIDEO)
                {
                    //pVideoPlayer->Unload();
                }
                else
                {
                    if (current_screen_type != SCREEN_1B)
                    {
                        pGUIWindow_CurrentMenu->Release();
                        pGUIWindow2->Release();
                        pGUIWindow2 = 0;
                        pEventTimer->Resume();
                        current_screen_type = SCREEN_GAME;
                        viewparams->bRedrawGameUI = v15;
                        break;
                    }
                    //VideoPlayer::dtor();
                }
                break;
            default:
                break;
            }
        } while (pMessageQueue_50CBD0->uNumMessages);
    }
}


//----- (004627B7) --------------------------------------------------------
void MainMenu_Loop()
{
    GUIButton *pButton; // eax@27
    unsigned int pControlParam; // ecx@35
    unsigned int pY; // [sp-18h] [bp-54h]@39
    Texture *pTexture; // [sp-14h] [bp-50h]@39
    GUIWindow *pWindow; // [sp+4h] [bp-38h]@11
    MSG msg;

    current_screen_type = SCREEN_GAME;

    pGUIWindow2 = 0;
    pAudioPlayer->StopChannels(-1, -1);
    pMouse->RemoveHoldingItem();

    pIcons_LOD->_inlined_sub2();

    pWindow_MainMenu = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
    Texture* pNew = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE);
    Texture* pLoad = pIcons_LOD->LoadTexturePtr("title_load", TEXTURE_16BIT_PALETTE);
    Texture* pCredits = pIcons_LOD->LoadTexturePtr("title_cred", TEXTURE_16BIT_PALETTE);
    Texture* pExit = pIcons_LOD->LoadTexturePtr("title_exit", TEXTURE_16BIT_PALETTE);

    pMainMenu_BtnNew = pWindow_MainMenu->CreateButton(495, 172, pNew->uTextureWidth, pNew->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowPartyCreationWnd, 0, 'N', "", pNew, 0);
    pMainMenu_BtnLoad = pWindow_MainMenu->CreateButton(495, 227, pLoad->uTextureWidth, pLoad->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowLoadWindow, 1, 'L', "", pLoad, 0);
    pMainMenu_BtnCredits = pWindow_MainMenu->CreateButton(495, 282, pCredits->uTextureWidth, pCredits->uTextureHeight, 1, 0, UIMSG_ShowCredits, 2, 'C', "", pCredits, 0);
    pMainMenu_BtnExit = pWindow_MainMenu->CreateButton(495, 337, pExit->uTextureWidth, pExit->uTextureHeight, 1, 0, UIMSG_ExitToWindows, 3, 0, "", pExit, 0);

    main_menu_background.Release();
    main_menu_background.Load("title.pcx", 0);
    SetCurrentMenuID(MENU_MAIN);
    SetForegroundWindow(window->GetApiHandle());
    SendMessageW(window->GetApiHandle(), WM_ACTIVATEAPP, 1, 0);
    while (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_SAVELOAD)
    {
        POINT pt;
        pMouse->GetCursorPos(&pt);
        pWindow = pWindow_MainMenu;
        if (GetCurrentMenuID() == MENU_SAVELOAD)
        {
            if (current_screen_type != SCREEN_LOADGAME)
            {
                main_menu_background.Release();
                main_menu_background.Load("lsave640.pcx", 0);
                pGUIWindow2 = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
                current_screen_type = SCREEN_LOADGAME;
                LoadUI_Load(0);
            }
            pWindow = pGUIWindow_CurrentMenu;
        }

        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();
        pRenderer->DrawTextureNew(0, 0, &main_menu_background);

        MainMenu_EventLoop();
        GUI_UpdateWindows();

        if (GetCurrentMenuID() != MENU_MAIN)
        {
            if (GetCurrentMenuID() == MENU_LoadingProcInMainMenu)
            {
                pIcons_LOD->RemoveTexturesPackFromTextureList();
                pGUIWindow_CurrentMenu->Release();
                pGUIWindow_CurrentMenu = 0;
                current_screen_type = SCREEN_GAME;
                viewparams->bRedrawGameUI = 1;
            }
        }
        else
        {
            if (!pModalWindow)// ???
            {
                pButton = pWindow->pControlsHead;
                for (pButton = pWindow->pControlsHead; pButton; pButton = pButton->pNext)
                {
                    if (pt.x >= (signed int)pButton->uX && pt.x <= (signed int)pButton->uZ
                        && pt.y >= (signed int)pButton->uY && pt.y <= (signed int)pButton->uW
                        && pWindow == pWindow_MainMenu)
                    {
                        pControlParam = pButton->msg_param;
                        switch (pControlParam) // backlight for buttons
                        {
                        case 0:
                            pTexture = pNew;
                            pY = 172;
                            break;
                        case 1:
                            pTexture = pLoad;
                            pY = 227;
                            break;
                        case 2:
                            pTexture = pCredits;
                            pY = 282;
                            break;
                        case 3:
                            pTexture = pExit;
                            pY = 337;
                            break;
                        }
                        pRenderer->DrawTextureIndexed(495, pY, pTexture);
                    }
                }
            }
        }
        pRenderer->EndScene();
        pRenderer->Present();
    }
    MainMenu_EventLoop();
    pRenderer->BeginScene();
    GUI_UpdateWindows();
    pRenderer->EndScene();
    pRenderer->Present();
    main_menu_background.Release();
    if (pGUIWindow2)
    {
        pGUIWindow2->Release();
        pGUIWindow2 = 0;
    }
    pWindow_MainMenu->Release();
    pIcons_LOD->RemoveTexturesPackFromTextureList();
}