# HG changeset patch
# User a.parshin
# Date 1431330664 -7200
# Node ID c674d547cc7cdf53f009d3eb2fee126d33144d67
# Parent b6140dfeac2775f9da3a3a3a8f3082c36aec7f81
GUIWindow switch logic refactored into behaviour classes
diff -r b6140dfeac27 -r c674d547cc7c Build/Visual Studio 2013/World of Might and Magic.vcxproj
--- a/Build/Visual Studio 2013/World of Might and Magic.vcxproj Sun May 10 03:21:14 2015 +0200
+++ b/Build/Visual Studio 2013/World of Might and Magic.vcxproj Mon May 11 09:51:04 2015 +0200
@@ -313,7 +313,6 @@
-
diff -r b6140dfeac27 -r c674d547cc7c Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters
--- a/Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters Sun May 10 03:21:14 2015 +0200
+++ b/Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters Mon May 11 09:51:04 2015 +0200
@@ -1146,9 +1146,6 @@
Engine
-
- Engine
-
Engine
diff -r b6140dfeac27 -r c674d547cc7c Engine/Engine.cpp
--- a/Engine/Engine.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Engine.cpp Mon May 11 09:51:04 2015 +0200
@@ -1059,7 +1059,7 @@
static_assert(sizeof(PartyTimeStruct) == 0x678, "Wrong type size");
static_assert(sizeof(Party) == 0x16238, "Wrong type size");
static_assert(sizeof(GUIButton) == 0xBC, "Wrong type size");
- static_assert(sizeof(GUIWindow) == 0x54, "Wrong type size");
+ //static_assert(sizeof(GUIWindow) == 0x54, "Wrong type size");
//static_assert(sizeof(GUIProgressBar) == 0x1B8, "Wrong type size");
static_assert(sizeof(GUIFont) == 0x1020, "Wrong type size");
// static_assert(sizeof(stru262_TurnBased) == 0x40, "Wrong type size");
@@ -1811,8 +1811,8 @@
Log::Warning(L"MM: entering main loop");
while (1)
{
- //MainMenuWindow* main_menu_window = MainMenuWindow::Create();
- //window->AddControl(main_menu_window);
+ MainMenuWindow *main_menu_window = MainMenuWindow::Create();
+ window->AddControl(main_menu_window);
MainMenu_Loop();
uGameState = GAME_STATE_PLAYING;
while (1)
@@ -2127,7 +2127,11 @@
v0 = uNumVisibleWindows;
pParty->armageddon_timer = 0;
while (v0 > 0)
- pWindowList[pVisibleWindowsIdxs[v0--] - 1].Release();
+ {
+ pWindowList[pVisibleWindowsIdxs[v0--] - 1]->Release();
+ delete pWindowList[pVisibleWindowsIdxs[v0--] - 1];
+ pWindowList[pVisibleWindowsIdxs[v0--] - 1] = nullptr;
+ }
}
//----- (00461103) --------------------------------------------------------
@@ -3405,7 +3409,7 @@
dword_5C3418 = a1;
dword_5C341C = a2;
_591094_decoration = activeLevelDecoration;
- pGUIWindow2 = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_GreetingNPC, a4, 0);
+ pGUIWindow2 = new GUIWindow_GenericDialogue(0, 0, window->GetWidth(), window->GetHeight(), a4, 0);
pGUIWindow2->CreateButton(61, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
pGUIWindow2->CreateButton(177, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
pGUIWindow2->CreateButton(292, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
diff -r b6140dfeac27 -r c674d547cc7c Engine/Events.cpp
--- a/Engine/Events.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Events.cpp Mon May 11 09:51:04 2015 +0200
@@ -582,7 +582,7 @@
if ( EnterHouse(HOUSE_DARK_GUILD_PIT) )
{
pAudioPlayer->StopChannels(-1, -1);
- window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_HouseInterior, 170, 0);
+ window_SpeakInHouse = new GUIWindow_House(0, 0, window->GetWidth(), window->GetHeight(), 170, 0);
window_SpeakInHouse->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
window_SpeakInHouse->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
window_SpeakInHouse->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
@@ -650,7 +650,7 @@
if ( EnterHouse(HOUSE_BODY_GUILD_ERATHIA) )
{
pAudioPlayer->PlaySound(SOUND_Invalid, 0, 0, -1, 0, 0, 0, 0);
- window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_HouseInterior, 165, 0);
+ window_SpeakInHouse = new GUIWindow_House(0, 0, window->GetWidth(), window->GetHeight(), 165, 0);
v48 = window_SpeakInHouse->pControlsHead;
if ( window_SpeakInHouse->pControlsHead )
{
@@ -1177,7 +1177,7 @@
v104 = 187;
if ( uCurrentHouse_Animation != 167 )
v104 = EVT_DWORD(_evt->v5);
- window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_HouseInterior, v104, 0);
+ window_SpeakInHouse = new GUIWindow_House(0, 0, window->GetWidth(), window->GetHeight(), v104, 0);
window_SpeakInHouse->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
window_SpeakInHouse->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
window_SpeakInHouse->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/IRender.h
--- a/Engine/Graphics/IRender.h Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/IRender.h Mon May 11 09:51:04 2015 +0200
@@ -4,6 +4,7 @@
#include "OSWindow.h"
#include "RenderStruct.h"
#include "../VectorTypes.h"
+#include "Engine/Graphics/Texture.h"
struct IRender
{
@@ -66,11 +67,11 @@
virtual void SetUIClipRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW) = 0;
virtual void ResetUIClipRect() = 0;
- virtual void CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, RGBTexture *pTexture) = 0;
+ virtual void CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, struct RGBTexture *pTexture) = 0;
virtual void DrawTextureNew(float u, float v, struct Texture *) = 0;
virtual void DrawTextureNew(float u, float v, struct RGBTexture *) = 0;
- virtual void DrawTextureRGB(unsigned int uOutX, unsigned int uOutY, RGBTexture *a4) = 0;
+ virtual void DrawTextureRGB(unsigned int uOutX, unsigned int uOutY, struct RGBTexture *a4) = 0;
virtual void DrawTextureIndexed(signed int x, signed int y, struct Texture *tex) = 0;
virtual void ZBuffer_Fill_2(signed int a2, signed int a3, struct Texture *pTexture, int a5) = 0;
@@ -105,7 +106,6 @@
virtual void RenderTerrainD3D() = 0;
- virtual void ChangeBetweenWinFullscreenModes() = 0;
virtual bool AreRenderSurfacesOk() = 0;
virtual bool IsGammaSupported() = 0;
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/Render.cpp
--- a/Engine/Graphics/Render.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/Render.cpp Mon May 11 09:51:04 2015 +0200
@@ -7810,121 +7810,6 @@
}
}
-//----- (004667E9) --------------------------------------------------------
-void Render::ChangeBetweenWinFullscreenModes()
-{
- float v0; // ST14_4@17
- int v4; // edx@26
- ObjectDesc *v5; // eax@26
- RGBTexture *v6; // esi@33
- const char *v8; // [sp-4h] [bp-28h]@33
-// struct tagRECT Rect; // [sp+14h] [bp-10h]@15
-
- /*if ( !pRenderer->bWindowMode && (dword_6BE364_game_settings_1 & 2) )
- {
- ModalWindow(pGlobalTXT_LocalizationStrings[62], UIMSG_0);// "Might and Magic VII requires your desktop to be in 16bit (32k or 65k) Color mode in order to operate in a window."
- return;
- }*/
- if ( bWindowMode || pRenderD3D->pAvailableDevices->bIsDeviceCompatible )
- {
- if ( pEventTimer->bPaused )
- dword_6BE364_game_settings_1 |= GAME_SETTINGS_0800;
- else
- pEventTimer->Pause();
- if ( pMiscTimer->bPaused )
- dword_6BE364_game_settings_1 |= GAME_SETTINGS_1000;
- else
- pMiscTimer->Pause();
- pMouse->bActive = 0;
- if ( pRenderD3D )
- {
- pBitmaps_LOD->ReleaseHardwareTextures();
- pSprites_LOD->ReleaseAll();
- }
- if ( bWindowMode )
- {
- //SetMenu(hWnd, 0);
- //SetWindowLongA(hWnd, -20, 0);
- //SetWindowLongA(hWnd, -16, 0x10000000u);
- window->SetFullscreenMode();
- pRenderer->InitializeFullscreen();
- }
- else
- {
- //ClipCursor(0);
- window->SetWindowedMode(window->GetWidth(), window->GetHeight());
- pRenderer->SwitchToWindow();
- }
- if ( pRenderD3D )
- {
- pBitmaps_LOD->_410423_move_textures_to_device();
- pSprites_LOD->MoveSpritesToVideoMemory();
- }
- if (!( pPaletteManager->uNumTargetBBits == uTargetBBits
- && pPaletteManager->uNumTargetGBits == uTargetGBits
- && pPaletteManager->uNumTargetRBits == uTargetRBits ))
- {
- pPaletteManager->SetColorChannelInfo(uTargetRBits, uTargetGBits, uTargetBBits);
- pPaletteManager->RecalculateAll();
- pBitmaps_LOD->SetupPalettes(uTargetRBits, uTargetGBits, uTargetBBits);
- pIcons_LOD->SetupPalettes(uTargetRBits, uTargetGBits, uTargetBBits);
- for (uint i = 0; i < pObjectList->uNumObjects; i++)
- {
- BYTE3(v4) = 0;
- v5 = &pObjectList->pObjects[i];
- *(short *)((char *)&v4 + 1) = v5->uParticleTrailColorR;
- LOBYTE(v4) = v5->uParticleTrailColorG;
- v5->uParticleTrailColor = v5->uParticleTrailColorB | (v4 << 8);
- }
- SetUserInterface(pParty->alignment, true);
- if ( pMediaPlayer->pVideoFrame.pPixels )
- pMediaPlayer->pVideoFrame.Load(pMediaPlayer->pVideoFrameTextureFilename, 1);
- if ( sCurrentMenuID != MENU_CREATEPARTY )
- {
- if ( sCurrentMenuID == MENU_CREDITSPROC )
- dword_A74C88 = 1;
- }
- else
- {
- if ( sCurrentMenuID )
- {
- v6 = &pTexture_PCX;
- pTexture_PCX.Release();
- v8 = "makeme.pcx";
- }
- else
- {
- v6 = &pTexture_PCX;
- pTexture_PCX.Release();
- v8 = "title.pcx";
- if ( sCurrentMenuID )
- v8 = "lsave640.pcx";
- }
- v6->Load(v8, 0);
- }
- }
- viewparams->bRedrawGameUI = 1;
- viewparams->InitGrayPalette();
- pMouse->SetCurrentCursorBitmap();
- /*if ( pRenderer->bWindowMode )
- {
- //MoveWindow(hWnd, uWindowX, uWindowY, uWindowWidth, uWindowHeight, 0);
- CenterWindowAndAdjustSize(hWnd, windowed_mode_width, windowed_mode_height);
- ShowWindow(hWnd, SW_SHOWNORMAL);
- }*/
- pMouse->bActive = true;
- if ( pMovie_Track )
- pMediaPlayer->SelectMovieType();
- if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0800)
- dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0800;
- else
- pEventTimer->Resume();
- if (dword_6BE364_game_settings_1 & GAME_SETTINGS_1000)
- dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_1000;
- else
- pMiscTimer->Resume();
- }
-}
//----- (004524D8) --------------------------------------------------------
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/Render.h
--- a/Engine/Graphics/Render.h Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/Render.h Mon May 11 09:51:04 2015 +0200
@@ -250,11 +250,11 @@
virtual void SetUIClipRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW);
virtual void ResetUIClipRect();
- virtual void CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, RGBTexture *pTexture);
+ virtual void CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, struct RGBTexture *pTexture);
virtual void DrawTextureNew(float u, float v, struct Texture *);
virtual void DrawTextureNew(float u, float v, struct RGBTexture *);
- virtual void DrawTextureRGB(unsigned int uOutX, unsigned int uOutY, RGBTexture *a4);
+ virtual void DrawTextureRGB(unsigned int uOutX, unsigned int uOutY, struct RGBTexture *a4);
virtual void DrawTextureIndexed(signed int x, signed int y, struct Texture *tex);
virtual void ZBuffer_Fill_2(signed int a2, signed int a3, struct Texture *pTexture, int a5);
@@ -295,7 +295,6 @@
//void DrawTerrainSW(int a1, int a2, int a3, int a4);
//void ExecOutdoorDrawSW();
- virtual void ChangeBetweenWinFullscreenModes();
virtual bool AreRenderSurfacesOk();
virtual bool IsGammaSupported();
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/RenderD3D11.cpp
--- a/Engine/Graphics/RenderD3D11.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/RenderD3D11.cpp Mon May 11 09:51:04 2015 +0200
@@ -78,7 +78,6 @@
void RenderD3D11::PrepareDecorationsRenderList_ODM() {__debugbreak();}
void RenderD3D11::DrawSpriteObjects_ODM() {__debugbreak();}
void RenderD3D11::RenderTerrainD3D() {__debugbreak();}
-void RenderD3D11::ChangeBetweenWinFullscreenModes() {__debugbreak();}
bool RenderD3D11::AreRenderSurfacesOk() {return true;}
void RenderD3D11::SaveScreenshot(const char *pFilename, unsigned int width, unsigned int height) {__debugbreak();}
void RenderD3D11::SavePCXScreenshot() {__debugbreak();}
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/RenderD3D11.h
--- a/Engine/Graphics/RenderD3D11.h Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/RenderD3D11.h Mon May 11 09:51:04 2015 +0200
@@ -115,7 +115,6 @@
virtual void RenderTerrainD3D();
- virtual void ChangeBetweenWinFullscreenModes();
virtual bool AreRenderSurfacesOk();
virtual bool IsGammaSupported();
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/Texture.cpp
--- a/Engine/Graphics/Texture.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/Texture.cpp Mon May 11 09:51:04 2015 +0200
@@ -74,7 +74,6 @@
RGBTexture stru_506E40; // weak
-RGBTexture pTexture_PCX;
int uTextureID_RestUI_restb4; // weak
diff -r b6140dfeac27 -r c674d547cc7c Engine/Graphics/Texture.h
--- a/Engine/Graphics/Texture.h Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Graphics/Texture.h Mon May 11 09:51:04 2015 +0200
@@ -174,7 +174,6 @@
extern RGBTexture stru_506E40; // weak
-extern RGBTexture pTexture_PCX;
extern int uTextureID_RestUI_restb4; // weak
@@ -261,11 +260,11 @@
extern unsigned int uTextureID_right_panel; // weak
-extern RGBTexture *pTexture_StatusBar;
-extern RGBTexture *pTexture_LeftFrame;
-extern RGBTexture *pTexture_TopFrame;
-extern RGBTexture *pTexture_BottomFrame;
-extern RGBTexture *pTexture_RightFrame;
+extern struct RGBTexture *pTexture_StatusBar;
+extern struct RGBTexture *pTexture_LeftFrame;
+extern struct RGBTexture *pTexture_TopFrame;
+extern struct RGBTexture *pTexture_BottomFrame;
+extern struct RGBTexture *pTexture_RightFrame;
extern unsigned int uTextureID_right_panel_loop; // weak
@@ -320,7 +319,7 @@
extern struct Texture pTex_F7CE30;
-extern RGBTexture stru_5773C4; // idb
+extern struct RGBTexture stru_5773C4; // idb
extern struct stru355 stru_4E82A4;// = {0x20, 0x41, 0, 0x20, 0xFF0000, 0xFF00, 0xFF, 0xFF000000}; moved to texture.h
extern struct stru355 stru_4EFCBC;// = {0x20, 0x41, 0, 0x10, 0x7C00, 0x3E0, 0x1F, 0x8000}; moved to texture.h
diff -r b6140dfeac27 -r c674d547cc7c Engine/MMT.cpp
--- a/Engine/MMT.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/MMT.cpp Mon May 11 09:51:04 2015 +0200
@@ -17,6 +17,8 @@
#include "lib/libpng/png.h"
#include "Media/Video/Bink_Smacker.h"
+#include "Game/MainMenu.h"
+
bool FileExists(const char *fname)
{
return access(fname, 0) != -1;
@@ -230,7 +232,7 @@
//Create new window
//WINDOW_MainMenu included in GUIWindow.h
- pWindow_MMT_MainMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ pWindow_MMT_MainMenu = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
//load buttons
//Texture* MMT_MM6 = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE);
@@ -249,10 +251,10 @@
pMMT_MainMenu_BtnContinue = pWindow_MMT_MainMenu->CreateButton((window->GetWidth() / 4) - 100, window->GetHeight() - ((window->GetHeight() / 4) + 50), MMT_Continue->uTextureWidth, MMT_Continue->uTextureHeight, 1, 0, UIMSG_MMT_MainMenu_Continue, 3, 0, "", MMT_Continue, 0);
pMMT_MainMenu_BtnExit = pWindow_MMT_MainMenu->CreateButton(window->GetWidth() - 130, window->GetHeight() - 35, MMT_Exit->uTextureWidth, MMT_Exit->uTextureHeight, 1, 0, UIMSG_ExitToWindows, 4, 0, "", MMT_Exit, 0);
- pTexture_PCX.Release();
+ main_menu_background.Release();
sprintf(pContainerName, "data\\New_Icons/%s", "MMTTITLE.pcx");
- if (pTexture_PCX.LoadPCXFile(pContainerName, 0) == 1)
+ if (main_menu_background.LoadPCXFile(pContainerName, 0) == 1)
Error("File not found: %s", pContainerName);
SetCurrentMenuID(MENU_MMT_MAIN_MENU);
@@ -278,7 +280,7 @@
}
pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX);
+ pRenderer->DrawTextureRGB(0, 0, &main_menu_background);
MMT_MenuMessageProc();//for ММТ menu
GUI_UpdateWindows();
@@ -335,7 +337,7 @@
pRenderer->Present();
//remove resource
- pTexture_PCX.Release();
+ main_menu_background.Release();
if ( pGUIWindow2 )
{
pGUIWindow2->Release();
@@ -384,7 +386,8 @@
pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0);//temporarily
break;
case UIMSG_ExitToWindows:
- GUIWindow::Create(495, 337, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnExit, 0);
+ extern GUIButton *pMainMenu_BtnExit;
+ new OnButtonClick2(495, 337, 0, 0, (int)pMainMenu_BtnExit, 0);
SetCurrentMenuID(MENU_EXIT_GAME);
default:
diff -r b6140dfeac27 -r c674d547cc7c Engine/Objects/Chest.cpp
--- a/Engine/Objects/Chest.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Objects/Chest.cpp Mon May 11 09:51:04 2015 +0200
@@ -185,7 +185,7 @@
pPlayers[uActiveCharacter]->PlaySound(SPEECH_4, 0);
}
OpenedTelekinesis = false;
- pChestWindow = pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Chest, uChestID, 0);
+ pChestWindow = pGUIWindow_CurrentMenu = new GUIWindow_Chest(0, 0, window->GetWidth(), window->GetHeight(), uChestID, 0);
pBtn_ExitCancel = pChestWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], pIcons_LOD->GetTexture(uExitCancelTextureId), 0);// Exit
pChestWindow->CreateButton( 7, 8, 460, 343, 1, 0, UIMSG_CHEST_ClickItem, 0, 0, "", 0);
current_screen_type = SCREEN_CHEST;
diff -r b6140dfeac27 -r c674d547cc7c Engine/Objects/NPC.cpp
--- a/Engine/Objects/NPC.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Objects/NPC.cpp Mon May 11 09:51:04 2015 +0200
@@ -1319,14 +1319,14 @@
}
//----- (004B40E6) --------------------------------------------------------
void NPCHireableDialogPrepare()
- {
+{
signed int v0; // ebx@1
NPCData *v1; // edi@1
v0 = 0;
v1 = HouseNPCData[(unsigned int)((char *)pDialogueNPCCount + -(dword_591080 != 0) )];//- 1
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 350, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 350, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton( 471, 0x1BDu, 0xA9u, 0x23u, 1, 0, UIMSG_Escape, 0, 0,
pGlobalTXT_LocalizationStrings[34], //"Cancel"
pIcons_LOD->GetTexture(uExitCancelTextureId),
@@ -1363,7 +1363,7 @@
if ( _this + 1 == uNumDialogueNPCPortraits && uHouse_ExitPic )
{
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[LOCSTR_ENTER_S], pMapStats->pInfos[uHouse_ExitPic].pName);
pBtn_ExitCancel = pDialogueWindow->CreateButton(566, 445, 75, 33, 1, 0, UIMSG_Escape, 0, 'N', pGlobalTXT_LocalizationStrings[34], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);// "Cancel"
pBtn_YES = pDialogueWindow->CreateButton(486, 445, 75, 33, 1, 0, UIMSG_BF, 1, 'Y', sHouseName.data(), pIcons_LOD->GetTexture(uTextureID_BUTTYES2), 0);
@@ -1382,7 +1382,7 @@
for ( i = 0; i < uNumDialogueNPCPortraits; ++i )
HouseNPCPortraitsButtonsList[i]->Release();
}
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 345, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 345, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton( 471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0,
pGlobalTXT_LocalizationStrings[74],// "End Conversation"
pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
diff -r b6140dfeac27 -r c674d547cc7c Engine/Objects/Player.cpp
--- a/Engine/Objects/Player.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Objects/Player.cpp Mon May 11 09:51:04 2015 +0200
@@ -7591,7 +7591,7 @@
unsigned int pX; // [sp+40h] [bp-8h]@2
CastSpellInfo *pSpellInfo;
- if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 103 )
+ if (current_character_screen_window == WINDOW_CharacterWindow_Inventory)
{
pMouse->GetClickPos(&pX, &pY);
inventoryYCoord = (pY - 17) / 32;
diff -r b6140dfeac27 -r c674d547cc7c Engine/Party.cpp
--- a/Engine/Party.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Party.cpp Mon May 11 09:51:04 2015 +0200
@@ -540,7 +540,7 @@
pPartyBuffs[i].Reset();
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 100; // default character ui - stats
+ current_character_screen_window = WINDOW_CharacterWindow_Stats; // default character ui - stats
uFlags = 0;
memset(_autonote_bits, 0, sizeof(_autonote_bits));
memset(_quest_bits, 0, sizeof(_quest_bits));
diff -r b6140dfeac27 -r c674d547cc7c Engine/Random.cpp
--- a/Engine/Random.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Random.cpp Mon May 11 09:51:04 2015 +0200
@@ -11,7 +11,7 @@
-struct Random *pRnd=new Random(); // idb
+struct Random *pRnd = new Random();
diff -r b6140dfeac27 -r c674d547cc7c Engine/Spells/CastSpellInfo.cpp
--- a/Engine/Spells/CastSpellInfo.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Engine/Spells/CastSpellInfo.cpp Mon May 11 09:51:04 2015 +0200
@@ -3503,7 +3503,7 @@
{
if ( pGUIWindow_Settings )
return;
- pGUIWindow_Settings = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell, (int)&pCastSpellInfo[result], 0);
+ pGUIWindow_Settings = new OnCastTargetedSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)&pCastSpellInfo[result], 0);
pGUIWindow_Settings->CreateButton(52, 422, 35, 0, 2, 0, UIMSG_CastSpell_Character_Big_Improvement, 0, 49, "", 0);
pGUIWindow_Settings->CreateButton(165, 422, 35, 0, 2, 0, UIMSG_CastSpell_Character_Big_Improvement, 1, 50, "", 0);
pGUIWindow_Settings->CreateButton(280, 422, 35, 0, 2, 0, UIMSG_CastSpell_Character_Big_Improvement, 2, 51, "", 0);
@@ -3516,7 +3516,7 @@
if ( pGUIWindow_Settings )
return;
- pGUIWindow_Settings = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell, (int)&pCastSpellInfo[result], 0);
+ pGUIWindow_Settings = new OnCastTargetedSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)&pCastSpellInfo[result], 0);
pGUIWindow_Settings->CreateButton(game_viewport_x, game_viewport_y, game_viewport_width, game_viewport_height, 1, 0, UIMSG_CastSpell_Shoot_Monster, 0, 0, "", 0);
pParty->sub_421B2C_PlaceInInventory_or_DropPickedItem();
return;
@@ -3526,7 +3526,7 @@
if ( pGUIWindow_Settings )
return;
- pGUIWindow_Settings = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell, (int)&pCastSpellInfo[result], 0);
+ pGUIWindow_Settings = new OnCastTargetedSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)&pCastSpellInfo[result], 0);
pGUIWindow_Settings->CreateButton(game_viewport_x, game_viewport_y, game_viewport_width, game_viewport_height, 1, 0, UIMSG_CastSpell_Telekinesis, 0, 0, "", 0);
pParty->sub_421B2C_PlaceInInventory_or_DropPickedItem();
return;
@@ -3548,7 +3548,7 @@
{
if ( pGUIWindow_Settings )
return;
- pGUIWindow_Settings = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell, (int)&pCastSpellInfo[result], 0);
+ pGUIWindow_Settings = new OnCastTargetedSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)&pCastSpellInfo[result], 0);
pGUIWindow_Settings->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, UIMSG_CastSpell_Character_Small_Improvement, 0, 0x31u, "", 0);
pGUIWindow_Settings->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, UIMSG_CastSpell_Character_Small_Improvement, 1, 0x32u, "", 0);
pGUIWindow_Settings->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, UIMSG_CastSpell_Character_Small_Improvement, 2, 0x33u, "", 0);
@@ -3558,7 +3558,7 @@
}
if ( HIBYTE(a5) & 2 && !pGUIWindow_Settings )
{
- pGUIWindow_Settings = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell, (int)&pCastSpellInfo[result], 0);
+ pGUIWindow_Settings = new OnCastTargetedSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)&pCastSpellInfo[result], 0);
pBtn_NPCLeft = pGUIWindow_Settings->CreateButton(469, 178,
pIcons_LOD->GetTexture(uTextureID_Btn_NPCLeft)->uTextureWidth,
pIcons_LOD->GetTexture(uTextureID_Btn_NPCLeft)->uTextureHeight,
diff -r b6140dfeac27 -r c674d547cc7c Engine/stuff.h
--- a/Engine/stuff.h Sun May 10 03:21:14 2015 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#pragma once
-#include
-#include
-
-
-
-inline void Assert(bool condition, const char *format, ...)
-{
- if (condition)
- return;
-
- va_list va;
- va_start(va, format);
- char msg[4096];
- vsprintf(msg, format, va);
- MessageBoxA(nullptr, msg, "Assert", 0);
- va_end(va);
-
- __debugbreak();
-}
-
-inline void Error(const char *format, ...)
-{
- va_list va;
- va_start(va, format);
- char msg[4096];
- vsprintf(msg, format, va);
- MessageBoxA(nullptr, msg, "Error", 0);
- va_end(va);
-
- __debugbreak();
-}
-
-
-
diff -r b6140dfeac27 -r c674d547cc7c GUI/GUIButton.cpp
--- a/GUI/GUIButton.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/GUIButton.cpp Mon May 11 09:51:04 2015 +0200
@@ -72,12 +72,6 @@
struct GUIButton *pMMT_MainMenu_BtnExit;
-struct GUIButton *pMainMenu_BtnExit;
-struct GUIButton *pMainMenu_BtnCredits;
-struct GUIButton *pMainMenu_BtnLoad;
-struct GUIButton *pMainMenu_BtnNew;
-
-
struct GUIButton *pBtn_Up;
struct GUIButton *pBtn_Down;
struct GUIButton *ptr_507BA4;
@@ -241,7 +235,7 @@
void UI_CreateEndConversationButton()
{
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 345, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 345, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton( 471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0,
pGlobalTXT_LocalizationStrings[74], //"End Conversation"
pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
diff -r b6140dfeac27 -r c674d547cc7c GUI/GUIWindow.cpp
--- a/GUI/GUIWindow.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/GUIWindow.cpp Mon May 11 09:51:04 2015 +0200
@@ -61,10 +61,10 @@
{0x96, 0xD4, 0xFF}}};
-int pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[1]; // idb
+enum WindowType current_character_screen_window;
struct GUIWindow *pWindow_MMT_MainMenu;
struct GUIWindow *pWindow_MainMenu;
-std::array pWindowList;
+std::array pWindowList;
struct GUIMessageQueue *pMessageQueue_50CBD0 = new GUIMessageQueue;
struct GUIMessageQueue *pMessageQueue_50C9E8 = new GUIMessageQueue;
@@ -74,6 +74,194 @@
+GUIWindow_Inventory_CastSpell::GUIWindow_Inventory_CastSpell(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ pMouse->SetCursorBitmap("MICON2");
+ pBtn_ExitCancel = CreateButton(392, 318, 75, 33, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[34],//Отмена
+ pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);
+ ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2); // Choose target / Выбрать цель
+ ++pIcons_LOD->uTexturePacksCount;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
+ current_screen_type = SCREEN_CASTING;
+ if (!pIcons_LOD->uNumPrevLoadedFiles)
+ pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
+}
+
+GUIWindow_House::GUIWindow_House(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ current_screen_type = SCREEN_HOUSE;
+ pBtn_ExitCancel = CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[80], // Quit building / Выйти из здания
+ pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
+ for (int v26 = 0; v26 < uNumDialogueNPCPortraits; ++v26)
+ {
+ char *v29, *v30;
+ if (v26 + 1 == uNumDialogueNPCPortraits && uHouse_ExitPic)
+ {
+ v30 = pMapStats->pInfos[uHouse_ExitPic].pName;
+ v29 = (char*)pGlobalTXT_LocalizationStrings[LOCSTR_ENTER_S];
+ }
+ else
+ {
+ if (v26 || !dword_591080)
+ v30 = HouseNPCData[v26 + 1 - ((dword_591080 != 0) ? 1 : 0)]->pName;
+ else
+ v30 = (char*)p2DEvents[button - 1].pProprieterName;
+ v29 = (char*)pGlobalTXT_LocalizationStrings[435];
+ }
+ sprintfex(byte_591180[v26].data(), v29, v30);
+ HouseNPCPortraitsButtonsList[v26] = CreateButton(pNPCPortraits_x[uNumDialogueNPCPortraits - 1][v26],
+ pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v26],
+ 63, 73, 1, 0, UIMSG_ClickHouseNPCPortrait, v26, 0, byte_591180[v26].data(), 0, 0, 0);
+ }
+ if (uNumDialogueNPCPortraits == 1)
+ {
+ window_SpeakInHouse = this;
+ _4B4224_UpdateNPCTopics(0);
+ }
+}
+
+GUIWindow_Dialogue::GUIWindow_Dialogue(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ prev_screen_type = current_screen_type;
+ current_screen_type = SCREEN_NPC_DIALOGUE;
+ pBtn_ExitCancel = CreateButton(0x1D7u, 0x1BDu, 0xA9u, 0x23u, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], //"Exit"
+ pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
+ if (par1C != 1)
+ {
+ int num_menu_buttons = 0;
+ int v11 = LOBYTE(pFontArrus->uFontHeight) - 3;
+ NPCData *speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
+ if (GetGreetType(sDialogue_SpeakingActorNPC_ID) == 1)//QuestsNPC_greet
+ {
+ if (speakingNPC->joins)
+ {
+ CreateButton(480, 130, 140, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0xDu, 0, "", 0);
+ num_menu_buttons = 1;
+ }
+ if (speakingNPC->evt_A)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v14 = NPC_EventProcessor(speakingNPC->evt_A);
+ if (v14 == 1 || v14 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x13u, 0, "", 0);
+ }
+ }
+ if (speakingNPC->evt_B)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v16 = NPC_EventProcessor(speakingNPC->evt_B);
+ if (v16 == 1 || v16 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x14u, 0, "", 0);
+ }
+ }
+ if (speakingNPC->evt_C)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v18 = NPC_EventProcessor(speakingNPC->evt_C);
+ if (v18 == 1 || v18 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x15u, 0, "", 0);
+ }
+ }
+ if (speakingNPC->evt_D)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v20 = NPC_EventProcessor(speakingNPC->evt_D);
+ if (v20 == 1 || v20 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x16u, 0, "", 0);
+ }
+ }
+ if (speakingNPC->evt_E)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v22 = NPC_EventProcessor(speakingNPC->evt_E);
+ if (v22 == 1 || v22 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x17u, 0, "", 0);
+ }
+ }
+ if (speakingNPC->evt_F)
+ {
+ if (num_menu_buttons < 4)
+ {
+ int v24 = NPC_EventProcessor(speakingNPC->evt_F);
+ if (v24 == 1 || v24 == 2)
+ CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x18u, 0, "", 0);
+ }
+ }
+ }
+ else
+ {
+ if (speakingNPC->joins)
+ {
+ CreateButton(0x1E0u, 0x82u, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Du, 0, pGlobalTXT_LocalizationStrings[407], 0);//Подробнее
+ if (speakingNPC->Hired())
+ {
+ sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[408], speakingNPC->pName); //Отпустить
+ CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pTmpBuf.data(), 0);
+ }
+ else
+ CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pGlobalTXT_LocalizationStrings[406], 0);//Нанять
+ num_menu_buttons = 2;
+ }
+ }
+ _41D08F_set_keyboard_control_group(num_menu_buttons, 1, 0, 1);
+ }
+}
+
+GUIWindow_Travel::GUIWindow_Travel(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ prev_screen_type = current_screen_type;
+ current_screen_type = SCREEN_CHANGE_LOCATION;
+ pBtn_ExitCancel = CreateButton(566, 445, 75, 33, 1, 0, UIMSG_CHANGE_LOCATION_ClickCencelBtn, 0, 'N', pGlobalTXT_LocalizationStrings[156], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);// Stay in this area / Остаться в этой области
+ pBtn_YES = CreateButton(486, 445, 75, 33, 1, 0, UIMSG_OnTravelByFoot, 0, 'Y', hint, pIcons_LOD->GetTexture(uTextureID_BUTTYES2), 0);
+ CreateButton(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], 63, 73, 1, 0, UIMSG_OnTravelByFoot, 1, ' ', hint, 0, 0, 0);
+ CreateButton(8, 8, 460, 344, 1, 0, UIMSG_OnTravelByFoot, 1, 0, hint, 0);
+}
+
+GUIWindow_Transition::GUIWindow_Transition(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ prev_screen_type = current_screen_type;
+ current_screen_type = SCREEN_INPUT_BLV;
+ pBtn_ExitCancel = CreateButton(0x236u, 0x1BDu, 0x4Bu, 0x21u, 1, 0, UIMSG_TransitionWindowCloseBtn, 0, 'N', pGlobalTXT_LocalizationStrings[34], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0); // Cancel / Отмена
+ pBtn_YES = CreateButton(0x1E6u, 0x1BDu, 0x4Bu, 0x21u, 1, 0, UIMSG_TransitionUI_Confirm, 0, 'Y', hint, pIcons_LOD->GetTexture(uTextureID_BUTTYES2), 0);
+ CreateButton(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], 0x3Fu, 0x49u, 1, 0, UIMSG_TransitionUI_Confirm, 1, 0x20u, hint, 0);
+ CreateButton(8, 8, 0x1CCu, 0x158u, 1, 0, UIMSG_TransitionUI_Confirm, 1u, 0, hint, 0);
+}
+
+GUIWindow_Spellbook::GUIWindow_Spellbook(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ InitializeBookTextures();
+ OpenSpellBook();
+}
+
+GUIWindow_GenericDialogue::GUIWindow_GenericDialogue(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ prev_screen_type = current_screen_type;
+ pKeyActionMap->EnterText(0, 15, this);
+ current_screen_type = SCREEN_BRANCHLESS_NPC_DIALOG;
+}
+
+OnCastTargetedSpell::OnCastTargetedSpell(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+{
+ pEventTimer->Pause();
+ pAudioPlayer->StopChannels(-1, -1);
+ pMouse->SetCursorBitmap("MICON2");
+ ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2u); // ChooseTarget / Выберите цель
+}
+
+
// inlined
//----- (mm6c::00420520) --------------------------------------------------
void GUIMessageQueue::Flush()
@@ -104,9 +292,8 @@
}
//----- (0041B4E1) --------------------------------------------------------
-int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall)
+void GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall)
{
- int result; // eax@1
int i; // edx@2
GUIButton *j; // ecx@3
int k; // edx@7
@@ -116,35 +303,29 @@
//v3 = uNewHotkey;
old_hot_key = toupper(uOldHotkey);
- result = toupper(uNewHotkey);
- v9 = result;
+ v9 = toupper(uNewHotkey);
if ( bFirstCall )
{
for ( i = uNumVisibleWindows; i >= 0; --i )
{
- result = 84 * pVisibleWindowsIdxs[i];
- for ( j = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; j; j = j->pNext )
+ for ( j = pWindowList[pVisibleWindowsIdxs[i] - 1]->pControlsHead; j; j = j->pNext )
j->field_28 = 0;
}
}
for ( k = uNumVisibleWindows; k >= 0; --k )
{
- result = 84 * pVisibleWindowsIdxs[k];
- for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1].pControlsHead; l; l = l->pNext )
+ for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1]->pControlsHead; l; l = l->pNext )
{
- LOBYTE(result) = old_hot_key;
if ( l->uHotkey == old_hot_key )
{
if ( !l->field_28 )
{
- LOBYTE(result) = v9;
l->field_28 = 1;
l->uHotkey = v9;
}
}
}
}
- return result;
}
//----- (0041B438) --------------------------------------------------------
@@ -157,7 +338,7 @@
Hot_key_num = toupper(uHotkey);
for( int i = uNumVisibleWindows; i >= 0 && pVisibleWindowsIdxs[i] > 0; i-- )
{
- current_window = &pWindowList[pVisibleWindowsIdxs[i] - 1];
+ current_window = pWindowList[pVisibleWindowsIdxs[i] - 1];
for ( result = current_window->pControlsHead; result; result = result->pNext )
{
if ( result->uHotkey == Hot_key_num )
@@ -237,6 +418,85 @@
}
+
+void GUIWindow_Book::Release()
+{
+ OnCloseBook();
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_Travel::Release()
+{
+ pTexture_outside->Release();
+ pTexture_Dialogue_Background->Release();
+ pIcons_LOD->SyncLoadedFilesCount();
+ current_screen_type = prev_screen_type;
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_Transition::Release()
+{
+ //pVideoPlayer->Unload();
+ pTexture_outside->Release();
+ pTexture_Dialogue_Background->Release();
+ pIcons_LOD->SyncLoadedFilesCount();
+ current_screen_type = prev_screen_type;
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_Dialogue::Release()
+{
+ if (!dword_591084)
+ pDialogueNPCPortraits[0]->Release();
+ uNumDialogueNPCPortraits = 0;
+ pTexture_Dialogue_Background->Release();
+
+ pIcons_LOD->SyncLoadedFilesCount();
+ current_screen_type = prev_screen_type;
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_Spellbook::Release()
+{
+ OnCloseSpellBookPage();
+ OnCloseSpellBook();
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_GenericDialogue::Release()
+{
+ pIcons_LOD->SyncLoadedFilesCount();
+ current_screen_type = prev_screen_type;
+ pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_CANCELLED);
+
+ GUIWindow::Release();
+}
+
+void GUIWindow_House::Release()
+{
+ for (int i = 0; i < uNumDialogueNPCPortraits; ++i)
+ pDialogueNPCPortraits[i]->Release();
+ uNumDialogueNPCPortraits = 0;
+ pTexture_Dialogue_Background->Release();
+
+ pIcons_LOD->SyncLoadedFilesCount();
+ pIcons_LOD->RemoveTexturesPackFromTextureList();
+ dword_5C35D4 = 0;
+ if (bFlipOnExit)
+ {
+ pParty->sRotationY = (stru_5C6E00->uIntegerDoublePi - 1) & (stru_5C6E00->uIntegerPi + pParty->sRotationY);
+ pIndoorCameraD3D->sRotationY = pParty->sRotationY;
+ }
+ pParty->uFlags |= 2u;
+
+ GUIWindow::Release();
+}
+
//----- (0041C26A) --------------------------------------------------------
void GUIWindow::Release()
{
@@ -251,78 +511,7 @@
//v1 = this;
if ( !this )
return;
-
- switch( this->eWindowType )
- {
- case WINDOW_GreetingNPC:
- {
- pIcons_LOD->SyncLoadedFilesCount();
- current_screen_type = prev_screen_type;
- pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_CANCELLED);
- break;
- }
- case WINDOW_HouseInterior:
- {
- for ( i = 0; i < uNumDialogueNPCPortraits; ++i )
- pDialogueNPCPortraits[i]->Release();
- uNumDialogueNPCPortraits = 0;
- pTexture_Dialogue_Background->Release();
- pIcons_LOD->SyncLoadedFilesCount();
- pIcons_LOD->RemoveTexturesPackFromTextureList();
- dword_5C35D4 = 0;
- if ( bFlipOnExit )
- {
- pParty->sRotationY = (stru_5C6E00->uIntegerDoublePi - 1) & (stru_5C6E00->uIntegerPi + pParty->sRotationY);
- pIndoorCameraD3D->sRotationY = pParty->sRotationY;
- }
- pParty->uFlags |= 2u;
- break;
- }
- case WINDOW_Transition:
- {
- //pVideoPlayer->Unload();
- pTexture_outside->Release();
- pTexture_Dialogue_Background->Release();
- pIcons_LOD->SyncLoadedFilesCount();
- current_screen_type = prev_screen_type;
- break;
- }
- case WINDOW_SpellBook:
- {
- OnCloseSpellBookPage();
- OnCloseSpellBook();
- break;
- }
- case WINDOW_Book:
- {
- OnCloseBook();
- break;
- }
- case WINDOW_ChangeLocation:
- {
- pTexture_outside->Release();
- pTexture_Dialogue_Background->Release();
- pIcons_LOD->SyncLoadedFilesCount();
- current_screen_type = prev_screen_type;
- break;
- }
- case WINDOW_Dialogue:
- {
- if ( !dword_591084 )
- pDialogueNPCPortraits[0]->Release();
- uNumDialogueNPCPortraits = 0;
- pTexture_Dialogue_Background->Release();
-
- pIcons_LOD->SyncLoadedFilesCount();
- current_screen_type = prev_screen_type;
- break;
- }
- case WINDOW_null:
- return;
- default:
- break;
- }
//v8 = this->pControlsHead;
if ( this->pControlsHead )
{
@@ -342,7 +531,7 @@
{
v12 = pVisibleWindowsIdxs[this->numVisibleWindows + 1];
pVisibleWindowsIdxs[this->numVisibleWindows] = v12;
- --pWindowList[v12 - 1].numVisibleWindows;
+ --pWindowList[v12 - 1]->numVisibleWindows;
++this->numVisibleWindows;
}
pVisibleWindowsIdxs[uNumVisibleWindows] = 0;
@@ -1380,262 +1569,68 @@
DrawText(a2, uX, uY, 0, "_", 0, 0, 0);
}
-//----- (0041C432) --------------------------------------------------------
-GUIWindow * GUIWindow::Create( unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eWindowType, int pButton, const char* hint )
-{
- unsigned int uNextFreeWindowID; // ebp@1
- //int *v8; // eax@1
- //GUIWindow *pWindow; // esi@4
- //int v10; // eax@4
- unsigned int v11; // ebx@15
- NPCData *speakingNPC; // ebp@15
- int v14; // eax@20
- int v16; // eax@25
- int v18; // eax@30
- int v20; // eax@35
- int v22; // eax@40
- int v24; // eax@45
-// int v25; // eax@65
- unsigned int v26; // ebx@65
- char *v27; // eax@71
- const char *v29; // [sp-8h] [bp-18h]@68
- char *v30; // [sp-4h] [bp-14h]@68
-// int uWidtha; // [sp+14h] [bp+4h]@66
- int num_menu_buttons; // [sp+20h] [bp+10h]@15
+
+GUIWindow::GUIWindow() :
+ uNumControls(0),
+ pControlsHead(nullptr),
+ pControlsTail(nullptr),
+ eWindowType(WINDOW_null)
+{}
- for (uNextFreeWindowID = 0; uNextFreeWindowID < 20; ++uNextFreeWindowID)
- {
- if (pWindowList[uNextFreeWindowID].eWindowType == WINDOW_null)
- break;
- }
-
- GUIWindow* pWindow = &pWindowList[uNextFreeWindowID];
- pWindow->uFrameWidth = uWidth;
- pWindow->uFrameHeight = uHeight;
+//----- (0041C432) --------------------------------------------------------
+GUIWindow::GUIWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, int pButton, const char* hint) :
+ uNumControls(0),
+ pControlsHead(nullptr),
+ pControlsTail(nullptr),
+ eWindowType(WINDOW_MainMenu)
+{
+ unsigned int uNextFreeWindowID; // ebp@1
+ //int *v8; // eax@1
+ //GUIWindow *pWindow; // esi@4
+ //int v10; // eax@4
+ unsigned int v11; // ebx@15
+ NPCData *speakingNPC; // ebp@15
+ int v14; // eax@20
+ int v16; // eax@25
+ int v18; // eax@30
+ int v20; // eax@35
+ int v22; // eax@40
+ int v24; // eax@45
+ // int v25; // eax@65
+ unsigned int v26; // ebx@65
+ char *v27; // eax@71
+ const char *v29; // [sp-8h] [bp-18h]@68
+ char *v30; // [sp-4h] [bp-14h]@68
+ // int uWidtha; // [sp+14h] [bp+4h]@66
+ int num_menu_buttons; // [sp+20h] [bp+10h]@15
- pWindow->uFrameX = uX;
- pWindow->uFrameY = uY;
- pWindow->uFrameZ = uX + uWidth - 1;
- pWindow->uFrameW = uY + uHeight - 1;
-
- pWindow->ptr_1C = (void *)pButton;
- pWindow->Hint = hint;
-
- pWindow->eWindowType = eWindowType;
- pWindow->receives_keyboard_input = false;
- ++uNumVisibleWindows;
- pWindow->numVisibleWindows = uNumVisibleWindows;
- pVisibleWindowsIdxs[uNumVisibleWindows] = uNextFreeWindowID + 1;
- if ( (signed int)eWindowType <= 20 )
- {
- if (eWindowType != WINDOW_Chest)
+ for (uNextFreeWindowID = 0; uNextFreeWindowID < 20; ++uNextFreeWindowID)
{
- switch (eWindowType)
- {
- case WINDOW_Book: {
- pWindow->InitializeBookView();
- break;
- }
- case WINDOW_Dialogue: {
- prev_screen_type = current_screen_type;
- current_screen_type = SCREEN_NPC_DIALOGUE;
- pBtn_ExitCancel = pWindow->CreateButton(0x1D7u, 0x1BDu, 0xA9u, 0x23u, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], //"Exit"
- pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
- if ( pWindow->par1C != 1 )
- {
- num_menu_buttons = 0;
- v11 = LOBYTE(pFontArrus->uFontHeight) - 3;
- speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
- if ( GetGreetType(sDialogue_SpeakingActorNPC_ID) == 1 )//QuestsNPC_greet
- {
- if ( speakingNPC->joins )
- {
- pWindow->CreateButton(480, 130, 140, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0xDu, 0, "", 0);
- num_menu_buttons = 1;
- }
- if ( speakingNPC->evt_A )
- {
- if ( num_menu_buttons < 4 )
- {
- v14 = NPC_EventProcessor(speakingNPC->evt_A);
- if ( v14 == 1 || v14 == 2 )
- pWindow->CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x13u, 0, "", 0);
- }
- }
- if ( speakingNPC->evt_B )
- {
- if ( num_menu_buttons < 4 )
- {
- v16 = NPC_EventProcessor(speakingNPC->evt_B);
- if ( v16 == 1 || v16 == 2 )
- pWindow->CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x14u, 0, "", 0);
- }
- }
- if ( speakingNPC->evt_C )
- {
- if ( num_menu_buttons < 4 )
- {
- v18 = NPC_EventProcessor(speakingNPC->evt_C);
- if ( v18 == 1 || v18 == 2 )
- pWindow->CreateButton( 0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x15u, 0, "", 0);
- }
- }
- if ( speakingNPC->evt_D )
- {
- if ( num_menu_buttons < 4 )
- {
- v20 = NPC_EventProcessor(speakingNPC->evt_D);
- if ( v20 == 1 || v20 == 2 )
- pWindow->CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x16u, 0, "", 0);
- }
- }
- if ( speakingNPC->evt_E )
- {
- if ( num_menu_buttons < 4 )
- {
- v22 = NPC_EventProcessor(speakingNPC->evt_E);
- if ( v22 == 1 || v22 == 2 )
- pWindow->CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x17u, 0, "", 0);
- }
- }
- if (speakingNPC->evt_F )
- {
- if ( num_menu_buttons < 4 )
- {
- v24 = NPC_EventProcessor(speakingNPC->evt_F);
- if ( v24 == 1 || v24 == 2 )
- pWindow->CreateButton(0x1E0u, num_menu_buttons++ * v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x18u, 0, "", 0);
- }
- }
- }
- else
- {
- if ( speakingNPC->joins )
- {
- pWindow->CreateButton(0x1E0u, 0x82u, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Du, 0, pGlobalTXT_LocalizationStrings[407], 0);//Подробнее
- if (speakingNPC->Hired())
- {
- sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[408], speakingNPC->pName); //Отпустить
- pWindow->CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pTmpBuf.data(), 0);
- }
- else
- pWindow->CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pGlobalTXT_LocalizationStrings[406], 0);//Нанять
- num_menu_buttons = 2;
- }
- }
- pWindow->_41D08F_set_keyboard_control_group(num_menu_buttons, 1, 0, 1);
- }
- break;
- }
- case WINDOW_ChangeLocation:
- {
- prev_screen_type = current_screen_type;
- current_screen_type = SCREEN_CHANGE_LOCATION;
- pBtn_ExitCancel = pWindow->CreateButton( 566, 445, 75, 33, 1, 0, UIMSG_CHANGE_LOCATION_ClickCencelBtn, 0, 'N', pGlobalTXT_LocalizationStrings[156], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);//Остаться в этой области
- pBtn_YES = pWindow->CreateButton( 486, 445, 75, 33, 1, 0, UIMSG_OnTravelByFoot, 0, 'Y', pWindow->Hint, pIcons_LOD->GetTexture(uTextureID_BUTTYES2), 0);
- pWindow->CreateButton(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], 63, 73, 1, 0, UIMSG_OnTravelByFoot, 1, ' ', pWindow->Hint, 0, 0, 0);
- pWindow->CreateButton( 8, 8, 460, 344, 1, 0, UIMSG_OnTravelByFoot, 1, 0, pWindow->Hint, 0);
- break;
- }
- case WINDOW_SpellBook: {// окно книги заклов
- InitializeBookTextures();
- pWindow->OpenSpellBook();
- break;
- }
- case WINDOW_GreetingNPC: {// окно приветствия НПС
- prev_screen_type = current_screen_type;
- pKeyActionMap->EnterText(0, 15, pWindow);
- current_screen_type = SCREEN_BRANCHLESS_NPC_DIALOG;
- break;
- }
+ if (pWindowList[uNextFreeWindowID] == nullptr)
+ break;
+ }
+
+ //GUIWindow* pWindow = &pWindowList[uNextFreeWindowID];
+ pWindowList[uNextFreeWindowID] = this;
+ this->uFrameWidth = uWidth;
+ this->uFrameHeight = uHeight;
- }
- return pWindow;
- }
-//LABEL_62:
- pWindow->CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
- pWindow->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
- pWindow->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
- pWindow->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
- pWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0);
- return pWindow;
- }
- if (eWindowType == WINDOW_HouseInterior)
- {
- current_screen_type = SCREEN_HOUSE;
- pBtn_ExitCancel = pWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[80],//Выйти из здания
- pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
- for ( v26 = 0; v26 < uNumDialogueNPCPortraits; ++v26 )
- {
- if ( v26 + 1 == uNumDialogueNPCPortraits && uHouse_ExitPic )
- {
- v30 = pMapStats->pInfos[uHouse_ExitPic].pName;
- v29 = (char*)pGlobalTXT_LocalizationStrings[LOCSTR_ENTER_S];
- }
- else
- {
- if ( v26 || !dword_591080 )
- v27 = HouseNPCData[v26 +1 - ((dword_591080 != 0)? 1:0)]->pName;
- else
- v27 = (char*)p2DEvents[pButton - 1].pProprieterName;
- v30 = v27;
- v29 = (char*)pGlobalTXT_LocalizationStrings[435];
- }
- sprintfex(byte_591180[v26].data(), v29, v30);
- HouseNPCPortraitsButtonsList[v26] = pWindow->CreateButton(pNPCPortraits_x[uNumDialogueNPCPortraits - 1][v26],
- pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v26],
- 63, 73, 1, 0, UIMSG_ClickHouseNPCPortrait, v26, 0, byte_591180[v26].data(), 0, 0, 0);
- }
- if ( uNumDialogueNPCPortraits == 1 )
- {
- window_SpeakInHouse = &pWindowList[uNextFreeWindowID];
- _4B4224_UpdateNPCTopics(0);
- }
- }
- else
- {
- if (eWindowType == WINDOW_Transition)
- {
- prev_screen_type = current_screen_type;
- current_screen_type = SCREEN_INPUT_BLV;
- pBtn_ExitCancel = pWindow->CreateButton(0x236u, 0x1BDu, 0x4Bu, 0x21u, 1, 0, UIMSG_TransitionWindowCloseBtn, 0, 'N', pGlobalTXT_LocalizationStrings[34], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);//Отмена
- pBtn_YES = pWindow->CreateButton(0x1E6u, 0x1BDu, 0x4Bu, 0x21u, 1, 0, UIMSG_TransitionUI_Confirm, 0, 'Y', pWindow->Hint, pIcons_LOD->GetTexture(uTextureID_BUTTYES2), 0);
- pWindow->CreateButton(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], 0x3Fu, 0x49u, 1, 0, UIMSG_TransitionUI_Confirm, 1, 0x20u, pWindow->Hint, 0);
- pWindow->CreateButton(8, 8, 0x1CCu, 0x158u, 1, 0, UIMSG_TransitionUI_Confirm, 1u, 0, pWindow->Hint, 0);
- return pWindow;
- }
- if (eWindowType == WINDOW_CastSpell)
- {
- pEventTimer->Pause();
- pAudioPlayer->StopChannels(-1, -1);
- pMouse->SetCursorBitmap("MICON2");
- ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2u);//Выберите цель
- return pWindow;
- }
- if (eWindowType == WINDOW_Scroll)
- {
- pWindow->CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
- pWindow->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
- pWindow->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
- pWindow->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
- pWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0);
- return pWindow;
- }
- if (eWindowType == WINDOW_CastSpell_InInventory)
- {
- pMouse->SetCursorBitmap("MICON2");
- pBtn_ExitCancel = pWindow->CreateButton(392, 318, 75, 33, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[34],//Отмена
- pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);
- ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2);//Выбрать цель
- ++pIcons_LOD->uTexturePacksCount;
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
- current_screen_type = SCREEN_CASTING;
- if ( !pIcons_LOD->uNumPrevLoadedFiles )
- pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
- }
- }
- return pWindow;
+ this->uFrameX = uX;
+ this->uFrameY = uY;
+ this->uFrameZ = uX + uWidth - 1;
+ this->uFrameW = uY + uHeight - 1;
+
+ this->ptr_1C = (void *)pButton;
+ this->Hint = hint;
+
+ //this->eWindowType = eWindowType;
+ this->receives_keyboard_input = false;
+ ++uNumVisibleWindows;
+ this->numVisibleWindows = uNumVisibleWindows;
+ pVisibleWindowsIdxs[uNumVisibleWindows] = uNextFreeWindowID + 1;
}
+
+
//----- (004B3EF0) --------------------------------------------------------
void DrawJoinGuildWindow( int pEventCode )
{
@@ -1643,15 +1638,15 @@
current_npc_text = (char *)pNPCTopics[pEventCode + 99].pText;
ContractSelectText(pEventCode);
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 350, WINDOW_MainMenu, pEventCode, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 350, pEventCode, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[34], pIcons_LOD->GetTexture(uExitCancelTextureId), 0); // Cancel
pDialogueWindow->CreateButton( 0, 0, 0, 0, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", 0);
- pDialogueWindow->CreateButton(480, 160, 140, 30, 1, 0, UIMSG_ClickNPCTopic, 0x52u, 0, pGlobalTXT_LocalizationStrings[122], 0);
+ pDialogueWindow->CreateButton(480, 160, 140, 30, 1, 0, UIMSG_ClickNPCTopic, 82, 0, pGlobalTXT_LocalizationStrings[122], 0);
pDialogueWindow->_41D08F_set_keyboard_control_group(1, 1, 0, 2);
dialog_menu_id = HOUSE_DIALOGUE_OTHER;
}
//----- (0044603D) --------------------------------------------------------
-void DialogueEnding()
+void DialogueEnding()
{
sDialogue_SpeakingActorNPC_ID = 0;
pDialogueWindow->Release();
@@ -1659,6 +1654,302 @@
pMiscTimer->Resume();
pEventTimer->Resume();
}
+
+
+
+void GUIWindow_GameMenu::Update()
+{
+ pRenderer->DrawTextureIndexed(
+ pViewport->uViewportTL_Y,
+ pViewport->uViewportTL_X,
+ pIcons_LOD->GetTexture(uTextureID_Options)
+ );
+ viewparams->bRedrawGameUI = 1;
+}
+
+void GUIWindow_CharacterRecord::Update()
+{
+ CharacterUI_CharacterScreen_Draw(pPlayers[uActiveCharacter]);
+}
+
+void GUIWindow_Options::Update()
+{
+ GameMenuUI_Options_Draw();
+}
+
+void GUIWindow_KeymappingOptions::Update()
+{
+ GameMenuUI_DrawKeyBindings();
+}
+
+void GUIWindow_VideoOptions::Update()
+{
+ GameMenuUI_DrawVideoOptions();
+}
+
+void GUIWindow_Book::Update()
+{
+ BookUI_Draw((WindowType)(int)ptr_1C);
+}
+
+void GUIWindow_BooksWindow::Update()
+{
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexed(uFrameY, uFrameX, pButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+}
+
+void GUIWindow_QuickReference::Update()
+{
+ GameUI_QuickRef_Draw();
+}
+
+void GUIWindow_Rest::Update()
+{
+ RestUI_Draw();
+}
+
+void GUIWindow_Travel::Update()
+{
+ TravelUI_Draw();
+}
+
+void GUIWindow_Transition::Update()
+{
+ TransitionUI_Draw();
+}
+
+void GUIWindow_Dialogue::Update()
+{
+ GameUI_DrawDialogue();
+}
+
+void GUIWindow_GenericDialogue::Update()
+{
+ GameUI_DrawBranchlessDialogue();
+}
+
+void GUIWindow_Spellbook::Update()
+{
+ DrawSpellBookContent(pPlayers[uActiveCharacter]);
+}
+
+void GUIWindow_Chest::Update()
+{
+ if (current_screen_type == SCREEN_CHEST)
+ {
+ Chest::DrawChestUI(par1C);
+ }
+ else if (current_screen_type == SCREEN_CHEST_INVENTORY)
+ {
+ pRenderer->ClearZBuffer(0, 479);
+ draw_leather();
+ CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
+ pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
+ }
+}
+
+void GUIWindow_Save::Update()
+{
+ SaveUI_Draw();
+}
+
+void GUIWindow_Load::Update()
+{
+ LoadUI_Draw();
+}
+
+void GUIWindow_House::Update()
+{
+ HouseDialogManager();
+ if (!window_SpeakInHouse)
+ return;
+ if (window_SpeakInHouse->par1C >= 53)
+ return;
+ if (pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] <= pParty->uTimePlayed)
+ {
+ if (window_SpeakInHouse->par1C < 53)
+ pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] = 0;
+ return;
+ }
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
+}
+
+void GUIWindow_Scroll::Update()
+{
+ CreateScrollWindow();
+}
+
+void GUIWindow_Inventory::Update()
+{
+ DrawMessageBox(0);
+ DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
+ DrawText(pFontLucida, 10, 40, 0, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
+ if (!pKeyActionMap->field_204)
+ {
+ ItemGen ItemGen2;
+ ItemGen2.Reset();
+ Release();
+ pEventTimer->Resume();
+ current_screen_type = SCREEN_GAME;
+ viewparams->bRedrawGameUI = 1;
+ int v39 = atoi(pKeyActionMap->pPressedKeysBuffer);
+ if (v39 > 0 && v39 < 800)
+ SpawnActor(v39);
+ }
+}
+
+void GUIWindow_Inventory_CastSpell::Update()
+{
+ pRenderer->ClearZBuffer(0, 479);
+ draw_leather();
+ CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
+ CharacterUI_DrawPaperdoll(pPlayers[uActiveCharacter]);
+ pRenderer->DrawTextureIndexedAlpha(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uTextureID_x_x_u));
+}
+
+void GUIWindow_Modal::Update()
+{
+ ModalWindow_ShowHint();
+}
+
+void GUIWindow_RestWindow::Update()
+{
+ __debugbreak(); // doesnt seems to get here, check stack trace & conditions
+ GUIButton GUIButton2; // [sp+28h] [bp-E0h]@133
+ memset(&GUIButton2, 0, sizeof(GUIButton2));
+ GUIButton2.uZ = 197;
+ GUIButton2.uW = 197;
+ GUIButton2.uX = 27;
+ GUIButton2.uY = 161;
+ GUIButton2.uWidth = 171;
+ GUIButton2.uHeight = 37;
+ GUIButton2.pParent = pButton_RestUI_WaitUntilDawn->pParent;
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, *((Texture **)ptr_1C + 15));
+ viewparams->bRedrawGameUI = 1;
+ GUIButton2.DrawLabel(pGlobalTXT_LocalizationStrings[183], pFontCreate, 0, 0); // Rest & Heal 8 hrs / Отдых и лечение 8 часов
+ GUIButton2.pParent = 0;
+ Release();
+}
+
+void OnButtonClick::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ GUIButton *pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexedAlpha(uFrameX, uFrameY, pButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+}
+
+void OnButtonClick2::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ GUIButton *pButton = (GUIButton *)ptr_1C;
+ if (pButton->uX >= 0 && pButton->uX <= window->GetWidth())
+ {
+ if (pButton->uY >= 0 && pButton->uY <= window->GetHeight())
+ {
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, pButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+ return;
+ }
+ }
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+}
+
+void OnButtonClick3::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, pButton->pTextures[1]);
+ viewparams->bRedrawGameUI = 1;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+}
+
+void OnButtonClick4::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexedAlpha(uFrameX, uFrameY, pButton->pTextures[1]);
+ viewparams->bRedrawGameUI = true;
+
+ Release();
+}
+
+void OnSaveLoad::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, pButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+
+ if (current_screen_type == SCREEN_SAVEGAME)
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_SaveGame, 0, 0);
+ else
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_LoadGame, 0, 0);
+}
+
+void OnCancel::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pGUIButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, pGUIButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pGUIButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
+}
+
+void OnCancel2::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexed(uFrameX, uFrameY, pButton->pTextures[1]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
+}
+
+void OnCancel3::Update()
+{
+ if (Hint != (char *)1)
+ pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
+ auto pButton = (GUIButton *)ptr_1C;
+ pRenderer->DrawTextureIndexedAlpha(uFrameX, uFrameY, pButton->pTextures[0]);
+ viewparams->bRedrawGameUI = true;
+ if (Hint && Hint != (char *)1)
+ pButton->DrawLabel(Hint, pFontCreate, 0, 0);
+ Release();
+
+ pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
+}
+
//----- (004156F0) --------------------------------------------------------
void GUI_UpdateWindows()
{
@@ -1674,7 +1965,6 @@
int v31; // eax@115
GUIButton *pButton; // ebp@118
int v39; // eax@129
- unsigned int pNumMessages; // eax@142
GUIButton *pGUIButton; // ebp@146
//unsigned int pX; // [sp-1Ch] [bp-124h]@17
//unsigned int pY; // [sp-18h] [bp-120h]@17
@@ -1690,129 +1980,14 @@
for ( i = 1; i <= uNumVisibleWindows; ++i )
{
- pWindow = &pWindowList[pVisibleWindowsIdxs[i] - 1];
+ pWindow = pWindowList[pVisibleWindowsIdxs[i] - 1];
+
+ pWindow->Update();
switch (pWindow->eWindowType)
{
- case WINDOW_GameMenu:
- {
- pRenderer->DrawTextureIndexed(pViewport->uViewportTL_Y,
- pViewport->uViewportTL_X, pIcons_LOD->GetTexture(uTextureID_Options));
- viewparams->bRedrawGameUI = 1;
- continue;
- }
- case WINDOW_CharacterRecord:
- {
- CharacterUI_CharacterScreen_Draw(pPlayers[uActiveCharacter]);
- continue;
- }
- case WINDOW_Options:
- {
- GameMenuUI_Options_Draw();
- continue;
- }
- case WINDOW_Book:
- {
- BookUI_Draw((WindowType)(int)pWindow->ptr_1C);
- continue;
- }
- case WINDOW_Dialogue:
- {
- GameUI_DrawDialogue();
- continue;
- }
- case WINDOW_QuickReference:
- {
- GameUI_QuickRef_Draw();
- continue;
- }
- case WINDOW_Rest:
- {
- RestUI_Draw();
- continue;
- }
- case WINDOW_ChangeLocation:
- {
- TravelUI_Draw();
- continue;
- }
- case WINDOW_SpellBook:
- {
- DrawSpellBookContent(pPlayers[uActiveCharacter]);
- continue;
- }
- case WINDOW_GreetingNPC:
- {
- GameUI_DrawBranchlessDialogue();
- continue;
- }
- case WINDOW_Chest:
- {
- if ( current_screen_type == SCREEN_CHEST )
- {
- Chest::DrawChestUI(pWindow->par1C);
- }
- else if ( current_screen_type == SCREEN_CHEST_INVENTORY )
- {
- pRenderer->ClearZBuffer(0, 479);
- draw_leather();
- CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
- pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
- }
- continue;
- }
- case WINDOW_SaveLoadButtons:
- {
- SaveUI_Draw();
- continue;
- }
- case WINDOW_MainMenu_Load:
- {
- LoadUI_Draw();
- continue;
- }
- case WINDOW_HouseInterior:
- {
- pWindowList[pVisibleWindowsIdxs[i] - 1].HouseDialogManager();
- if ( !window_SpeakInHouse )
- continue;
- if ( window_SpeakInHouse->par1C >= 53 )
- continue;
- if ( pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] <=pParty->uTimePlayed )
- {
- if ( window_SpeakInHouse->par1C < 53 )
- pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] = 0;
- continue;
- }
- pNumMessages = pMessageQueue_50CBD0->uNumMessages;
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
- continue;
- }
- case WINDOW_Transition:
- {
- TransitionUI_Draw();
- continue;
- }
- case WINDOW_Scroll:
- {
- CreateScrollWindow();
- continue;
- }
- case WINDOW_CastSpell_InInventory:
- {
- pRenderer->ClearZBuffer(0, 479);
- draw_leather();
- CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
- CharacterUI_DrawPaperdoll(pPlayers[uActiveCharacter]);
- pRenderer->DrawTextureIndexedAlpha(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uTextureID_x_x_u));
- continue;
- }
- case WINDOW_ModalWindow:
- {
- ModalWindow_ShowHint();
- continue;
- }
case WINDOW_50:
{
+ __debugbreak(); // looks like debugging tools
v27 = Color16(255, 255, 255);
if ( ptr_507BD0->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS)
{
@@ -1839,9 +2014,12 @@
ptr_507BD0->Release();
continue;
}
+
+ __debugbreak(); // switch pass-through
}
case WINDOW_59:
{
+ __debugbreak(); // looks like debugging tools
pWindow->DrawMessageBox(0);
pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
pWindow->DrawText(pFontLucida, 10, 40, 0, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
@@ -1876,193 +2054,11 @@
}
continue;
}
- case WINDOW_PressedButton2:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- if ( pButton->uX >= 0 && pButton->uX <= window->GetWidth() )
- {
- if ( pButton->uY >= 0 && pButton->uY <= window->GetHeight() )
- {
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[0]);
- viewparams->bRedrawGameUI = 1;
- if ( pWindow->Hint )
- {
- if ( pWindow->Hint != (char *)1 )
- pButton->DrawLabel(pWindow->Hint, pFontCreate, 0, 0);
- }
- pWindow->Release();
- continue;
- }
- }
- viewparams->bRedrawGameUI = 1;
- if ( pWindow->Hint )
- {
- if ( pWindow->Hint != (char *)1 )
- pButton->DrawLabel(pWindow->Hint, pFontCreate, 0, 0);
- }
- pWindow->Release();
- continue;
- }
- case WINDOW_CharactersPressedButton:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[1]);
- viewparams->bRedrawGameUI = 1;
- if ( pWindow->Hint )
- {
- if ( pWindow->Hint != (char *)1 )
- pButton->DrawLabel(pWindow->Hint, pFontCreate, 0, 0);
- }
- pWindow->Release();
- continue;
- }
- case WINDOW_PressedButton:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexedAlpha(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[0]);
- viewparams->bRedrawGameUI = 1;
- if ( pWindow->Hint )
- {
- if ( pWindow->Hint != (char *)1 )
- pButton->DrawLabel(pWindow->Hint, pFontCreate, 0, 0);
- }
- pWindow->Release();
- continue;
- }
- case WINDOW_5D:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexedAlpha(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[1]);
- viewparams->bRedrawGameUI = 1;
- pWindow->Release();
- continue;
- }
- case WINDOW_SaveLoadBtn:
- {
- if (pWindow->Hint != (char *)1)
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[0]);
- pHint = pWindow->Hint;
- viewparams->bRedrawGameUI = 1;
- if ( pHint && pHint != (char *)1 )
- pButton->DrawLabel(pHint, pFontCreate, 0, 0);
- pWindow->Release();
- if (current_screen_type == SCREEN_SAVEGAME)
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_SaveGame, 0, 0);
- else
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_LoadGame, 0, 0);
- continue;
- }
- case WINDOW_LoadGame_CancelBtn:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexedAlpha(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[0]);
- viewparams->bRedrawGameUI = 1;
- if ( pWindow->Hint && pWindow->Hint != (char *)1 )
- pButton->DrawLabel(pWindow->Hint, pFontCreate, 0, 0);
- pWindow->Release();
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
- continue;
- }
- case WINDOW_CloseRestWindowBtn:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pGUIButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, pGUIButton->pTextures[0]);
- pHint = pWindow->Hint;
- viewparams->bRedrawGameUI = 1;
- if ( pHint && pHint != (char *)1 )
- pGUIButton->DrawLabel(pHint, pFontCreate, 0, 0);
- pWindow->Release();
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
- continue;
- }
- case WINDOW_ExitCharacterWindow:
- {
- if ( pWindow->Hint != (char *)1 )
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, pButton->pTextures[1]);
- pHint = pWindow->Hint;
- viewparams->bRedrawGameUI = 1;
- if ( pHint && pHint != (char *)1 )
- pButton->DrawLabel(pHint, pFontCreate, 0, 0);
- pWindow->Release();
- pNumMessages = pMessageQueue_50CBD0->uNumMessages;
- pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
- continue;
- }
- case WINDOW_RestWindow:
- {
- memset(&GUIButton2, 0, 0xBCu);
- GUIButton2.uZ = 197;
- GUIButton2.uW = 197;
- GUIButton2.uX = 27;
- GUIButton2.uY = 161;
- GUIButton2.uWidth = 171;
- GUIButton2.uHeight = 37;
- GUIButton2.pParent = pButton_RestUI_WaitUntilDawn->pParent;
- pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0);
- pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, *((Texture **)pWindow->ptr_1C + 15));
- viewparams->bRedrawGameUI = 1;
- GUIButton2.DrawLabel(pGlobalTXT_LocalizationStrings[183], pFontCreate, 0, 0);//Отдых и лечение 8 часов
- GUIButton2.pParent = 0;
- pGUIWindow2 = pWindow;
- pGUIWindow2->Release();
- continue;
- }
- case WINDOW_BooksWindow:
- {
- pButton = (GUIButton *)pWindow->ptr_1C;
- pRenderer->DrawTextureIndexed(pWindow->uFrameY,
- pWindow->uFrameX, pButton->pTextures[0]);
- viewparams->bRedrawGameUI = true;
- continue;
- }
- case WINDOW_CharacterWindow_Inventory:
- {
- pWindow->DrawMessageBox(0);
- pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
- pWindow->DrawText(pFontLucida, 10, 40, 0, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
- if ( !pKeyActionMap->field_204 )
- {
- ItemGen2.Reset();
- pWindow->Release();
- pEventTimer->Resume();
- current_screen_type = SCREEN_GAME;
- viewparams->bRedrawGameUI = 1;
- v39 = atoi(pKeyActionMap->pPressedKeysBuffer);
- if ( v39 > 0 )
- {
- if ( v39 < 800 )
- SpawnActor(v39);
- }
- }
- continue;
- }
- case WINDOW_KeyMappingOptions:
- {
- GameMenuUI_DrawKeyBindings();
- continue;
- }
- case WINDOW_VideoOptions:
- {
- GameMenuUI_DrawVideoOptions();
- continue;
- }
+ case WINDOW_MainMenu:
+ case WINDOW_null:
+ continue;
default:
+ __debugbreak();
continue;
}
}
@@ -2071,11 +2067,7 @@
if ( sub_4637E0_is_there_popup_onscreen() )
UI_OnMouseRightClick(0);
}
-//void LoadFonts_and_DrawCopyrightWindow()
-//{
- //MainMenuUI_LoadFontsAndSomeStuff();
- // DrawCopyrightWindow();
-//}
+
//----- (00415485) --------------------------------------------------------
void DrawMM7CopyrightWindow()
{
@@ -2111,7 +2103,7 @@
{
pEventTimer->Pause();
modal_window_prev_screen_type = current_screen_type;
- pModalWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_ModalWindow, OnRelease_message, pStrHint);
+ pModalWindow = new GUIWindow_Modal(0, 0, window->GetWidth(), window->GetHeight(), OnRelease_message, pStrHint);
current_screen_type = SCREEN_MODAL_WINDOW;
}
@@ -2186,7 +2178,7 @@
if ( mscroll_id <= 782 )
{
uTextureID_720980 = pIcons_LOD->LoadTexture("leather", TEXTURE_16BIT_PALETTE);
- pGUIWindow_ScrollWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Scroll, mscroll_id - 700, 0);
+ pGUIWindow_ScrollWindow = new GUIWindow_Scroll(0, 0, window->GetWidth(), window->GetHeight(), mscroll_id - 700, 0);
}
}
}
@@ -2798,7 +2790,7 @@
}
//----- (004B3E1E) --------------------------------------------------------
-void sub_4B3E1E()
+void sub_4B3E1E()
{
NPCData *v0; // ST40_4@1
signed int v1; // edi@1
@@ -2809,7 +2801,7 @@
v1 = 0;
pDialogueWindow->eWindowType = WINDOW_MainMenu;
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Dialogue, 1, 0);
+ pDialogueWindow = new GUIWindow_Dialogue(0, 0, window->GetWidth(), window->GetHeight(), 1, 0);
if (pNPCStats->pProfessions[v0->uProfession].pBenefits)//*(&pNPCStats->field_13A5C + 5 * v0->uProfession) )
{
pDialogueWindow->CreateButton(480, 160, 140, 28, 1, 0, UIMSG_SelectNPCDialogueOption, 77, 0, pGlobalTXT_LocalizationStrings[407], 0);//Подробнее
@@ -3122,7 +3114,7 @@
current_npc_text = (char *)pNPCTopics[a4 + 168].pText;
_4B254D_SkillMasteryTeacher(a4); //might be needed because of contract_approved ?
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 350, WINDOW_MainMenu, a4, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 350, a4, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0,
pGlobalTXT_LocalizationStrings[34], pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", 0);
@@ -3234,7 +3226,7 @@
uDialogueType = 83;
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 350, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 350, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[34],// "Cancel"
pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", 0);
diff -r b6140dfeac27 -r c674d547cc7c GUI/GUIWindow.h
--- a/GUI/GUIWindow.h Sun May 10 03:21:14 2015 +0200
+++ b/GUI/GUIWindow.h Mon May 11 09:51:04 2015 +0200
@@ -267,54 +267,54 @@
{
WINDOW_null = 0,
WINDOW_MainMenu = 1,
- WINDOW_GameMenu = 3,
+ WINDOW_GameMenu = 3,
WINDOW_CharacterRecord = 4,
WINDOW_Options = 6,
WINDOW_8 = 8,
WINDOW_Book = 9,
- WINDOW_Dialogue = 10,
- WINDOW_QuickReference = 12,
- WINDOW_F = 15,
- WINDOW_Rest = 16,
- WINDOW_ChangeLocation = 17,
- WINDOW_SpellBook = 18,
- WINDOW_GreetingNPC = 19,
- WINDOW_Chest = 20,
- WINDOW_22 = 0x16,
+ WINDOW_Dialogue = 10,
+ WINDOW_QuickReference = 12,
+ WINDOW_F = 15,
+ WINDOW_Rest = 16,
+ WINDOW_ChangeLocation = 17,
+ WINDOW_SpellBook = 18,
+ WINDOW_GreetingNPC = 19,
+ WINDOW_Chest = 20,
+ WINDOW_22 = 0x16,
WINDOW_SaveLoadButtons = 23,
- WINDOW_MainMenu_Load = 0x18,
- WINDOW_HouseInterior = 0x19,
- WINDOW_Transition = 26,
- WINDOW_CastSpell = 27,
- WINDOW_Scroll = 0x1E,
+ WINDOW_MainMenu_Load = 0x18,
+ WINDOW_HouseInterior = 0x19,
+ WINDOW_Transition = 26,
+ WINDOW_CastSpell = 27, // OnCastTargetedSpell
+ WINDOW_Scroll = 0x1E,
WINDOW_CastSpell_InInventory = 31,
- WINDOW_ModalWindow = 70,
- WINDOW_50 = 80,
- WINDOW_59 = 89,
+ WINDOW_ModalWindow = 70,
+ WINDOW_50 = 80,
+ WINDOW_59 = 89,
WINDOW_PressedButton2 = 90,
WINDOW_CharactersPressedButton = 91,
- WINDOW_PressedButton = 92,
- WINDOW_5D = 93,
- WINDOW_SaveLoadBtn = 94,
- WINDOW_LoadGame_CancelBtn = 95,
- WINDOW_CloseRestWindowBtn = 96,
- WINDOW_ExitCharacterWindow = 97,
- WINDOW_RestWindow = 0x62,
- WINDOW_BooksWindow = 99,
- WINDOW_CharacterWindow_Stats = 0x64,
- WINDOW_CharacterWindow_Skills = 0x65,
- WINDOW_CharacterWindow_Awards = 0x66,
+ WINDOW_PressedButton = 92,
+ WINDOW_5D = 93,
+ WINDOW_SaveLoadBtn = 94,
+ WINDOW_LoadGame_CancelBtn = 95, // OnCancel3
+ WINDOW_CloseRestWindowBtn = 96,
+ WINDOW_ExitCharacterWindow = 97, // OnCancel2
+ WINDOW_RestWindow = 0x62,
+ WINDOW_BooksWindow = 99,
+ WINDOW_CharacterWindow_Stats = 0x64,
+ WINDOW_CharacterWindow_Skills = 0x65,
+ WINDOW_CharacterWindow_Awards = 0x66,
WINDOW_CharacterWindow_Inventory = 0x67,
- WINDOW_68 = 104,
+ WINDOW_68 = 104,
WINDOW_KeyMappingOptions = 0x69,
- WINDOW_VideoOptions = 0x6A,
- WINDOW_LloydsBeacon = 177,
- WINDOW_TownPortal = 195,
- WINDOW_QuestBook = 200,
- WINDOW_AutonotesBook = 0xC9,
- WINDOW_MapsBook = 0xCA,
- WINDOW_CalendarBook = 0xCB,
- WINDOW_JournalBook = 0xE0,
+ WINDOW_VideoOptions = 0x6A,
+ WINDOW_LloydsBeacon = 177,
+ WINDOW_TownPortal = 195,
+ WINDOW_QuestBook = 200,
+ WINDOW_AutonotesBook = 0xC9,
+ WINDOW_MapsBook = 0xCA,
+ WINDOW_CalendarBook = 0xCB,
+ WINDOW_JournalBook = 0xE0,
};
struct GUIButton;
@@ -330,11 +330,9 @@
#pragma pack(push, 1)
struct GUIWindow
{
- inline GUIWindow()
- {
- pControlsHead = pControlsTail = nullptr;
- eWindowType = WINDOW_null;
- }
+ GUIWindow();
+ GUIWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, int pButton, const char* hint);
+ virtual ~GUIWindow() {}
GUIButton *CreateButton(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, int a6, int a7,
UIMessageType msg, unsigned int msg_param, unsigned __int8 uHotkey, const char *pName, struct Texture *pTextures, ...);
@@ -348,11 +346,11 @@
void InitializeBookView();
void DrawMessageBox(int arg0);
GUIButton *GetControl(unsigned int uID);
- void Release();
void _41D08F_set_keyboard_control_group(int num_buttons, int a3, int a4, int a5);
void _41D73D_draw_buff_tooltip();
- static GUIWindow *Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eWindowType, int pButton, const char* hint);
+ virtual void Update() {}
+ virtual void Release();
unsigned int uFrameX;
unsigned int uFrameY;
@@ -381,8 +379,300 @@
};
#pragma pack(pop)
+struct GUIWindow_GameMenu : public GUIWindow
+{
+ GUIWindow_GameMenu(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_GameMenu() {}
+ virtual void Update();
+};
+struct GUIWindow_CharacterRecord : public GUIWindow
+{
+ GUIWindow_CharacterRecord(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_CharacterRecord() {}
+ virtual void Update();
+};
+struct GUIWindow_Options : public GUIWindow
+{
+ GUIWindow_Options(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Options() {}
+
+ virtual void Update();
+};
+struct GUIWindow_KeymappingOptions : public GUIWindow
+{
+ GUIWindow_KeymappingOptions(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_KeymappingOptions() {}
+
+ virtual void Update();
+};
+struct GUIWindow_VideoOptions : public GUIWindow
+{
+ GUIWindow_VideoOptions(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_VideoOptions() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Book : public GUIWindow
+{
+ GUIWindow_Book(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {
+ InitializeBookView();
+ }
+ virtual ~GUIWindow_Book() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_BooksWindow : public GUIWindow
+{
+ GUIWindow_BooksWindow(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_BooksWindow() {}
+
+ virtual void Update();
+};
+struct GUIWindow_QuickReference : public GUIWindow
+{
+ GUIWindow_QuickReference(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_QuickReference() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Rest : public GUIWindow
+{
+ GUIWindow_Rest(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Rest() {}
+
+ virtual void Update();
+};
+struct GUIWindow_RestWindow : public GUIWindow
+{
+ GUIWindow_RestWindow(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_RestWindow() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Travel : public GUIWindow
+{
+ GUIWindow_Travel(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_Travel() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Transition : public GUIWindow
+{
+ GUIWindow_Transition(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_Transition() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Dialogue : public GUIWindow
+{
+ GUIWindow_Dialogue(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_Dialogue() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Spellbook : public GUIWindow
+{
+ GUIWindow_Spellbook(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_Spellbook() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_GenericDialogue : public GUIWindow
+{
+ GUIWindow_GenericDialogue(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_GenericDialogue() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Chest : public GUIWindow
+{
+ GUIWindow_Chest(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {
+ CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
+ CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
+ CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
+ CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
+ CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0);
+ }
+ virtual ~GUIWindow_Chest() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Save : public GUIWindow
+{
+ GUIWindow_Save(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Save() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Load : public GUIWindow
+{
+ GUIWindow_Load(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Load() {}
+
+ virtual void Update();
+};
+struct GUIWindow_House : public GUIWindow
+{
+ GUIWindow_House(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_House() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Scroll : public GUIWindow
+{
+ GUIWindow_Scroll(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {
+ CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
+ CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
+ CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
+ CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
+ CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0);
+ }
+ virtual ~GUIWindow_Scroll() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Inventory : public GUIWindow
+{
+ GUIWindow_Inventory(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Inventory() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct GUIWindow_Inventory_CastSpell : public GUIWindow
+{
+ GUIWindow_Inventory_CastSpell(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~GUIWindow_Inventory_CastSpell() {}
+
+ virtual void Update();
+};
+struct GUIWindow_Modal : public GUIWindow
+{
+ GUIWindow_Modal(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~GUIWindow_Modal() {}
+
+ virtual void Update();
+};
+struct OnButtonClick : public GUIWindow
+{
+ OnButtonClick(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnButtonClick() {}
+
+ virtual void Update();
+};
+struct OnButtonClick2 : public GUIWindow
+{
+ OnButtonClick2(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnButtonClick2() {}
+
+ virtual void Update();
+};
+struct OnButtonClick3 : public GUIWindow
+{
+ OnButtonClick3(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnButtonClick3() {}
+
+ virtual void Update();
+};
+struct OnButtonClick4 : public GUIWindow
+{
+ OnButtonClick4(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnButtonClick4() {}
+
+ virtual void Update();
+ virtual void Release();
+};
+struct OnSaveLoad : public GUIWindow
+{
+ OnSaveLoad(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnSaveLoad() {}
+
+ virtual void Update();
+};
+struct OnCancel : public GUIWindow
+{
+ OnCancel(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnCancel() {}
+
+ virtual void Update();
+};
+struct OnCancel2 : public GUIWindow
+{
+ OnCancel2(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnCancel2() {}
+
+ virtual void Update();
+};
+struct OnCancel3 : public GUIWindow
+{
+ OnCancel3(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
+ GUIWindow(x, y, width, height, button, hint)
+ {}
+ virtual ~OnCancel3() {}
+
+ virtual void Update();
+};
+struct OnCastTargetedSpell : public GUIWindow
+{
+ OnCastTargetedSpell(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
+ virtual ~OnCastTargetedSpell() {}
+};
@@ -473,10 +763,10 @@
-extern int pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[]; // idb
+extern enum WindowType current_character_screen_window;
extern struct GUIWindow *pWindow_MMT_MainMenu;
extern struct GUIWindow *pWindow_MainMenu;
-extern std::array pWindowList;
+extern std::array pWindowList;
@@ -616,7 +906,7 @@
unsigned int UI_GetHealthManaAndOtherQualitiesStringColor(signed int current_pos, signed int base_pos);
unsigned int __fastcall GetSizeInInventorySlots(unsigned int uNumPixels);
struct GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey); // idb
-int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall);
+void GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall);
void DrawBuff_remaining_time_string(int uY, struct GUIWindow *window, __int64 remaining_time, struct GUIFont *Font);
void GameUI_DrawItemInfo(struct ItemGen* inspect_item); // idb
void MonsterPopup_Draw(unsigned int uActorID, struct GUIWindow *window);
@@ -748,11 +1038,6 @@
extern struct GUIButton *pMMT_MainMenu_BtnContinue;
extern struct GUIButton *pMMT_MainMenu_BtnExit;
-extern struct GUIButton *pMainMenu_BtnExit;
-extern struct GUIButton *pMainMenu_BtnCredits;
-extern struct GUIButton *pMainMenu_BtnLoad;
-extern struct GUIButton *pMainMenu_BtnNew;
-
extern struct GUIButton *pBtn_Up;
extern struct GUIButton *pBtn_Down;
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UICharacter.cpp
--- a/GUI/UI/UICharacter.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UICharacter.cpp Mon May 11 09:51:04 2015 +0200
@@ -416,7 +416,7 @@
CharacterUI_LoadPaperdollTextures();
current_screen_type = screen;
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CharacterRecord, uActiveCharacter, 0);
+ auto wnd = new GUIWindow_CharacterRecord(0, 0, window->GetWidth(), window->GetHeight(), uActiveCharacter, 0);
pCharacterScreen_StatsBtn = wnd->CreateButton(pViewport->uViewportTL_X + 12, pViewport->uViewportTL_Y + 308,
pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureWidth,
pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureHeight,
@@ -472,7 +472,7 @@
bRingsShownInCharScreen = 0;
CharacterUI_LoadPaperdollTextures();
current_screen_type = SCREEN_CASTING;
- CS_inventory_window = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_CastSpell_InInventory, (int)this, 0);
+ CS_inventory_window = new GUIWindow_Inventory_CastSpell(0, 0, window->GetWidth(), window->GetHeight(), (int)this, 0);
pCharacterScreen_ExitBtn = CS_inventory_window->CreateButton(394, 318, 75, 33, 1, 0, UIMSG_ClickExitCharacterWindowBtn, 0, 0,
pGlobalTXT_LocalizationStrings[79], // Close
pIcons_LOD->GetTexture(papredoll_dbrds[2]),
@@ -695,7 +695,7 @@
void CharacterUI_CharacterScreen_Draw(Player *player)
{
pRenderer->ClearZBuffer(0, 479);
- switch (pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0])
+ switch (current_character_screen_window)
{
case WINDOW_CharacterWindow_Stats: // stats
CharacterUI_ReleaseButtons();
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIHouses.cpp
--- a/GUI/UI/UIHouses.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIHouses.cpp Mon May 11 09:51:04 2015 +0200
@@ -1023,7 +1023,7 @@
return;
}
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 345, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 345, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton(526, 445, 75, 33, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[74],// "End Conversation"
pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);
pDialogueWindow->CreateButton(8, 8, 450, 320, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", nullptr);
@@ -1035,7 +1035,7 @@
|| in_current_building_type != BuildingType_Temple || uMessageParam != BuildingType_MindGuild )
{
pDialogueWindow->Release();
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 345, WINDOW_MainMenu, 0, 0);
+ pDialogueWindow = new GUIWindow(0, 0, window->GetWidth(), 345, 0, 0);
pBtn_ExitCancel = pDialogueWindow->CreateButton(526, 445, 75, 33, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[74],// "End Conversation"
pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);
pDialogueWindow->CreateButton(8, 8, 450, 320, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", nullptr);
@@ -3405,7 +3405,7 @@
if ( EnterHouse(HOUSE_BODY_GUILD_ERATHIA) )
{
pAudioPlayer->PlaySound(SOUND_Invalid, 0, 0, -1, 0, 0, 0, 0);
- window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_HouseInterior, 165, 0);
+ window_SpeakInHouse = new GUIWindow_House(0, 0, window->GetWidth(), window->GetHeight(), 165, 0);
window_SpeakInHouse->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 1, 0x31, "", 0);
window_SpeakInHouse->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 2, 0x32, "", 0);
window_SpeakInHouse->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 3, 0x33, "", 0);
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIMainMenu.cpp
--- a/GUI/UI/UIMainMenu.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIMainMenu.cpp Mon May 11 09:51:04 2015 +0200
@@ -50,7 +50,7 @@
pFontComic = LoadFont("comic.fnt", "FONTPAL", nullptr);
for (uint i = 0; i < 20; ++i)
- pWindowList[i].eWindowType = WINDOW_null;
+ pWindowList[i] = nullptr;
uNumVisibleWindows = -1;
memset(pVisibleWindowsIdxs.data(), 0, sizeof(pVisibleWindowsIdxs));
@@ -108,7 +108,7 @@
uTextureID_BUTTMAKE = pIcons_LOD->LoadTexture("BUTTMAKE", TEXTURE_16BIT_PALETTE);
uTextureID_BUTTMAKE2 = pIcons_LOD->LoadTexture("BUTTMAKE2", TEXTURE_16BIT_PALETTE);
- pPrimaryWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ pPrimaryWindow = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pPrimaryWindow->CreateButton(7, 8, 460, 343, 1, 0, UIMSG_MouseLeftClickInGame, 0, 0, "", 0);
pPrimaryWindow->CreateButton(61, 424, 31, 80, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);//buttons for portraits
@@ -298,7 +298,7 @@
cred_texture.uHeight, Color16(0x70u, 0x8Fu, 0xFEu), Color16(0xECu, 0xE6u, 0x9Cu), pString, cred_texture.pPixels, cred_texture.uWidth);
free(pString);
- pWindow_MainMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, cred_texturet);
+ pWindow_MainMenu = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, cred_texturet);
pWindow_MainMenu->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_Escape, 0, 27, "", 0);
current_screen_type = SCREEN_CREATORS;
SetCurrentMenuID(MENU_CREDITSPROC);
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIOptions.cpp
--- a/GUI/UI/UIOptions.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIOptions.cpp Mon May 11 09:51:04 2015 +0200
@@ -26,7 +26,7 @@
GUIWindow *GameMenuUI_Load()
{
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_GameMenu, 0, 0);
+ auto wnd = new GUIWindow_GameMenu(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
uTextureID_Options = pIcons_LOD->LoadTexture("options", TEXTURE_16BIT_PALETTE);
uTextureID_New1 = pIcons_LOD->LoadTexture("new1", TEXTURE_16BIT_PALETTE);
uTextureID_Load1 = pIcons_LOD->LoadTexture("load1", TEXTURE_16BIT_PALETTE);
@@ -94,7 +94,7 @@
uTextureID_Optkb[3] = pIcons_LOD->LoadTexture("optkb_1", TEXTURE_16BIT_PALETTE);
uTextureID_Optkb[4] = pIcons_LOD->LoadTexture("optkb_2", TEXTURE_16BIT_PALETTE);
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_KeyMappingOptions, 0, 0);
+ auto wnd = new GUIWindow_KeymappingOptions(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
wnd->CreateButton(241, 302, 214, 40, 1, 0, UIMSG_Escape, 0, 0, "", 0);
@@ -249,7 +249,7 @@
not_available_bloodsplats_texture_id = pIcons_LOD->LoadTexture("opvdG-bs", TEXTURE_16BIT_PALETTE);
not_available_us_colored_lights_texture_id = pIcons_LOD->LoadTexture("opvdG-cl", TEXTURE_16BIT_PALETTE);
not_available_tinting_texture_id = pIcons_LOD->LoadTexture("opvdG-tn", TEXTURE_16BIT_PALETTE);
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_VideoOptions, 0, 0);
+ auto wnd = new GUIWindow_VideoOptions(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
wnd->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, 1, 0, UIMSG_Escape, 0, 0, "", 0);
//if ( pRenderer->pRenderD3D )
{
@@ -332,7 +332,7 @@
options_menu_skin.uTextureID_ShowDamage = pIcons_LOD->LoadTexture("option02", TEXTURE_16BIT_PALETTE);
options_menu_skin.uTextureID_WalkSound = pIcons_LOD->LoadTexture("option01", TEXTURE_16BIT_PALETTE);
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Options, 0, 0);
+ auto wnd = new GUIWindow_Options(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
wnd->CreateButton(22, 270,
pIcons_LOD->GetTexture(options_menu_skin.uTextureID_TurnSpeed[2])->uTextureWidth,
pIcons_LOD->GetTexture(options_menu_skin.uTextureID_TurnSpeed[2])->uTextureHeight,
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIPartyCreation.cpp
--- a/GUI/UI/UIPartyCreation.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIPartyCreation.cpp Mon May 11 09:51:04 2015 +0200
@@ -107,7 +107,7 @@
//move sky
pRenderer->BeginScene();
- pRenderer->DrawTextureNew(0, 0, &pTexture_PCX);
+ pRenderer->DrawTextureNew(0, 0, &main_menu_background);
uPlayerCreationUI_SkySliderPos = (GetTickCount() % 12800) / 20;
pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos, 2, pTexture_MAKESKY);
pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos - window->GetWidth(), 2, pTexture_MAKESKY);
@@ -165,9 +165,9 @@
case WINDOW_INPUT_CONFIRMED: // press enter
pGUIWindow_CurrentMenu->receives_keyboard_input_2 = WINDOW_INPUT_NONE;
v126 = 0;
- for ( int i = 0; i < strlen(pKeyActionMap->pPressedKeysBuffer); ++i )//edit name
+ for ( int j = 0; j < strlen(pKeyActionMap->pPressedKeysBuffer); ++j )//edit name
{
- if ( pKeyActionMap->pPressedKeysBuffer[i] == ' ' )
+ if ( pKeyActionMap->pPressedKeysBuffer[j] == ' ' )
++v126;
}
if ( strlen(pKeyActionMap->pPressedKeysBuffer) && v126 != strlen(pKeyActionMap->pPressedKeysBuffer) )
@@ -438,7 +438,7 @@
pTextures_arrowr[i] = pIcons_LOD->LoadTexturePtr(pTmpBuf.data(), TEXTURE_16BIT_PALETTE);
}
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
uControlParam = 0;
uX = 8;
do
@@ -558,8 +558,8 @@
bool party_not_creation_flag; // [sp+74h] [bp-Ch]@1
party_not_creation_flag = false;
- pTexture_PCX.Release();
- pTexture_PCX.Load("makeme.pcx", 0);
+ main_menu_background.Release();
+ main_menu_background.Load("makeme.pcx", 0);
pGUIWindow_CurrentMenu->receives_keyboard_input_2 = WINDOW_INPUT_NONE;
SetCurrentMenuID(MENU_CREATEPARTY);
@@ -599,7 +599,7 @@
}
}
}
- pTexture_PCX.Release();
+ main_menu_background.Release();
pGUIWindow_CurrentMenu->Release();
pIcons_LOD->RemoveTexturesPackFromTextureList();
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIPopup.cpp
--- a/GUI/UI/UIPopup.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIPopup.cpp Mon May 11 09:51:04 2015 +0200
@@ -1482,11 +1482,11 @@
Inventory_ItemPopupAndAlchemy();
else if ( (signed int)pY >= 345 )
break;
- else if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 100 )//2DEvent - CharacerScreenStats
+ else if (current_character_screen_window == WINDOW_CharacterWindow_Stats)//2DEvent - CharacerScreenStats
CharacterUI_StatsTab_ShowHint();
- else if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 101 )//2DEvent - CharacerScreenSkills
+ else if (current_character_screen_window == WINDOW_CharacterWindow_Skills)//2DEvent - CharacerScreenSkills
CharacterUI_SkillsTab_ShowHint();
- else if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 103 )//2DEvent - CharacerScreenInventory
+ else if (current_character_screen_window == WINDOW_CharacterWindow_Inventory)//2DEvent - CharacerScreenInventory
Inventory_ItemPopupAndAlchemy();
break;
}
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIRest.cpp
--- a/GUI/UI/UIRest.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIRest.cpp Mon May 11 09:51:04 2015 +0200
@@ -30,7 +30,7 @@
}
pEventTimer->Pause();
if (_506F14_resting_stage != 2)
- GUIWindow::Create(518, 450, 0, 0, WINDOW_PressedButton2, (int)pBtn_Rest, 0);
+ new OnButtonClick2(518, 450, 0, 0, (int)pBtn_Rest, 0);
_506F18_num_minutes_to_sleep = 0;
_506F14_resting_stage = 0;
uRestUI_FoodRequiredToRest = 2;
@@ -72,7 +72,7 @@
OutdoorLocation::LoadActualSkyFrame();
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Rest, 0, 0);
+ auto wnd = new GUIWindow_Rest(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pButton_RestUI_Exit = wnd->CreateButton(280, 297, 154, 37, 1, 0, UIMSG_ExitRest, 0, 0, "", pIcons_LOD->GetTexture(uTextureID_RestUI_restexit), 0);
pButton_RestUI_Main = wnd->CreateButton( 24, 154, 225, 37, 1, 0, UIMSG_Rest8Hour, 0, 'R', "", pIcons_LOD->GetTexture(uTextureID_RestUI_restb4), 0);
pButton_RestUI_WaitUntilDawn = wnd->CreateButton( 61, 232, 154, 33, 1, 0, UIMSG_AlreadyResting, 0, 'D', "", pIcons_LOD->GetTexture(uTextureID_RestUI_restb1), 0);
@@ -170,6 +170,5 @@
Party::Sleep6Hours();
}
else
- GUIWindow::Create(pButton_RestUI_Exit->uX, pButton_RestUI_Exit->uY, 0, 0, WINDOW_CloseRestWindowBtn,
- (int)pButton_RestUI_Exit, pGlobalTXT_LocalizationStrings[81]); // "Exit Rest"
+ new OnCancel(pButton_RestUI_Exit->uX, pButton_RestUI_Exit->uY, 0, 0, (int)pButton_RestUI_Exit, pGlobalTXT_LocalizationStrings[81]); // "Exit Rest"
}
\ No newline at end of file
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UISaveLoad.cpp
--- a/GUI/UI/UISaveLoad.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UISaveLoad.cpp Mon May 11 09:51:04 2015 +0200
@@ -17,6 +17,8 @@
#include "..\../Engine/SaveLoad.h"
#include "..\../Engine/texts.h"
+#include "Game/MainMenu.h"
+
//----- (004601B7) --------------------------------------------------------
static void UI_DrawSaveLoad(bool save)
@@ -180,9 +182,9 @@
pRenderer->DrawTextureIndexed(351, 302, pIcons_LOD->GetTexture(uTextureID_x_u));
}
else
- pRenderer->DrawTextureNew(0, 0, &pTexture_PCX);
- pGUIWindow_CurrentMenu = GUIWindow::Create(saveload_dlg_xs[uDialogueType], saveload_dlg_ys[uDialogueType], saveload_dlg_zs[uDialogueType],
- saveload_dlg_ws[uDialogueType], WINDOW_MainMenu_Load, 0, 0);
+ pRenderer->DrawTextureNew(0, 0, &main_menu_background);
+ pGUIWindow_CurrentMenu = new GUIWindow_Load(saveload_dlg_xs[uDialogueType], saveload_dlg_ys[uDialogueType], saveload_dlg_zs[uDialogueType],
+ saveload_dlg_ws[uDialogueType], 0, 0);
pGUIWindow_CurrentMenu->DrawText(pFontSmallnum, 25, 199, 0, pGlobalTXT_LocalizationStrings[505], 0, 0, 0);// "Reading..."
pRenderer->Present();
pSavegameList->Initialize(0);
@@ -312,7 +314,7 @@
uTextureID_AR_UP_DN = pIcons_LOD->LoadTexture("AR_UP_DN", TEXTURE_16BIT_PALETTE);
uTextureID_AR_DN_DN = pIcons_LOD->LoadTexture("AR_DN_DN", TEXTURE_16BIT_PALETTE);
- auto wnd = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_SaveLoadButtons, 0, 0);
+ auto wnd = new GUIWindow_Save(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
wnd->CreateButton(21, 198, 191, 18, 1, 0, UIMSG_SelectLoadSlot, 0, 0, "", 0);
wnd->CreateButton(21, 218, 191, 18, 1, 0, UIMSG_SelectLoadSlot, 1, 0, "", 0);
wnd->CreateButton(21, 238, 191, 18, 1, 0, UIMSG_SelectLoadSlot, 2, 0, "", 0);
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UIShops.cpp
--- a/GUI/UI/UIShops.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UIShops.cpp Mon May 11 09:51:04 2015 +0200
@@ -1508,7 +1508,7 @@
{
case HOUSE_DIALOGUE_SHOP_DISPLAY_EQUIPMENT:
{
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
pPlayers[uActiveCharacter]->OnInventoryLeftClick();
break;
}
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UITransition.cpp
--- a/GUI/UI/UITransition.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UITransition.cpp Mon May 11 09:51:04 2015 +0200
@@ -62,7 +62,7 @@
if ( pMapStats->GetMapInfo(pCurrentMapName) )
{
sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName); // "Leave %s"
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data());
+ pDialogueWindow = new GUIWindow_Transition(0, 0, window->GetWidth(), window->GetHeight(), 0, sHouseName.data());
//if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId )
//PlayHouseSound(anim_id, HouseSound_Greeting);
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 )
@@ -72,7 +72,7 @@
return;
}
strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]);
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data());
+ pDialogueWindow = new GUIWindow_Transition(0, 0, window->GetWidth(), window->GetHeight(), 0, sHouseName.data());
//if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId )
//PlayHouseSound(anim_id, HouseSound_Greeting);
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 )
@@ -87,7 +87,7 @@
if ( pMapStats->GetMapInfo(v15) )
{
sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[411], pMapStats->pInfos[pMapStats->GetMapInfo(v15)].pName);//Войти в ^Pv[%s]
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data());
+ pDialogueWindow = new GUIWindow_Transition(0, 0, window->GetWidth(), window->GetHeight(), 0, sHouseName.data());
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 )
pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0);
if ( IndoorLocation::GetLocationIndex(pLocationName) )
@@ -95,7 +95,7 @@
return;
}
strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[73]);//Войти
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data());
+ pDialogueWindow = new GUIWindow_Transition(0, 0, window->GetWidth(), window->GetHeight(), 0, sHouseName.data());
//if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId )
//PlayHouseSound(anim_id, HouseSound_Greeting);
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 )
@@ -125,7 +125,7 @@
sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName);// "Leave %s"
else
strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]);// "Exit"
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_ChangeLocation, 0, sHouseName.data());
+ pDialogueWindow = new GUIWindow_Travel(0, 0, window->GetWidth(), window->GetHeight(), 0, sHouseName.data());
}
//----- (00444DCA) --------------------------------------------------------
diff -r b6140dfeac27 -r c674d547cc7c GUI/UI/UiGame.cpp
--- a/GUI/UI/UiGame.cpp Sun May 10 03:21:14 2015 +0200
+++ b/GUI/UI/UiGame.cpp Mon May 11 09:51:04 2015 +0200
@@ -88,7 +88,7 @@
viewparams->bRedrawGameUI = true;
if ( uActiveCharacter == uPlayerID )
{
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
current_screen_type = SCREEN_CHEST_INVENTORY;
uActiveCharacter = uPlayerID;
return;
@@ -109,14 +109,14 @@
{
viewparams->bRedrawGameUI = true;
uActiveCharacter = uPlayerID;
- if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 102 )
+ if (current_character_screen_window == WINDOW_CharacterWindow_Awards)
FillAwardsData();
return;
}
viewparams->bRedrawGameUI = true;
if ( uActiveCharacter == uPlayerID )
{
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
current_screen_type = SCREEN_CHEST_INVENTORY;
uActiveCharacter = uPlayerID;
return;
@@ -137,7 +137,7 @@
if (dialog_menu_id == HOUSE_DIALOGUE_SHOP_BUY_STANDARD || dialog_menu_id == HOUSE_DIALOGUE_SHOP_6)
{
__debugbreak(); // fix indexing
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
pGUIWindow_CurrentMenu = CharacterUI_Initialize(SCREEN_E);
return;
}
@@ -318,7 +318,7 @@
}
if (sDialogue_SpeakingActorNPC_ID < 0)
v9 = 4;
- pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Dialogue, 3, 0);//pNumberContacts = 1, v9 = 0; pNumberContacts = 2, v9 = 3;
+ pDialogueWindow = new GUIWindow_Dialogue(0, 0, window->GetWidth(), window->GetHeight(), 3, 0);//pNumberContacts = 1, v9 = 0; pNumberContacts = 2, v9 = 3;
if (pNPCInfo->Hired() && !pNPCInfo->bHasUsedTheAbility)
{
if (pNPCInfo->uProfession == 10 || //Healer
@@ -1315,7 +1315,7 @@
{
for (int i = uNumVisibleWindows; i > 0; --i)
{
- pWindow = &pWindowList[pVisibleWindowsIdxs[i] - 1];
+ pWindow = pWindowList[pVisibleWindowsIdxs[i] - 1];
if ( (signed int)pX >= (signed int)pWindow->uFrameX && (signed int)pX <= (signed int)pWindow->uFrameZ
&& (signed int)pY >= (signed int)pWindow->uFrameY && (signed int)pY <= (signed int)pWindow->uFrameW )
{
@@ -1436,10 +1436,10 @@
return;
}
}
- if ( (signed int)pX >= (signed int)pWindowList[0].uFrameX && (signed int)pX <= (signed int)pWindowList[0].uFrameZ
- && (signed int)pY >= (signed int)pWindowList[0].uFrameY && (signed int)pY <= (signed int)pWindowList[0].uFrameW )
+ if ( (signed int)pX >= (signed int)pWindowList[0]->uFrameX && (signed int)pX <= (signed int)pWindowList[0]->uFrameZ
+ && (signed int)pY >= (signed int)pWindowList[0]->uFrameY && (signed int)pY <= (signed int)pWindowList[0]->uFrameW )
{
- for ( pButton = pWindowList[0].pControlsHead; pButton != nullptr; pButton = pButton->pNext )
+ for ( pButton = pWindowList[0]->pControlsHead; pButton != nullptr; pButton = pButton->pNext )
{
switch (pButton->uButtonType)
{
diff -r b6140dfeac27 -r c674d547cc7c Game/Game.cpp
--- a/Game/Game.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Game/Game.cpp Mon May 11 09:51:04 2015 +0200
@@ -328,25 +328,25 @@
pIcons_LOD->RemoveTexturesPackFromTextureList();
pGUIWindow_CurrentMenu->Release();
current_screen_type = SCREEN_OPTIONS;
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_8, 0, 0);
+ __debugbreak();//pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_8, 0, 0);
continue;
case UIMSG_ArrowUp:
--pSaveListPosition;
if (pSaveListPosition < 0)
pSaveListPosition = 0;
- GUIWindow::Create(215, 199, 17, 17, WINDOW_PressedButton2, (int)pBtnArrowUp, 0);
+ new OnButtonClick2(215, 199, 17, 17, (int)pBtnArrowUp, 0);
continue;
case UIMSG_DownArrow:
++pSaveListPosition;
if (pSaveListPosition >= uMessageParam)
pSaveListPosition = uMessageParam - 1;
- GUIWindow::Create(215, 323, 17, 17, WINDOW_PressedButton2, (int)pBtnDownArrow, 0);
+ new OnButtonClick2(215, 323, 17, 17, (int)pBtnDownArrow, 0);
continue;
case UIMSG_Cancel:
- GUIWindow::Create(350, 302, 106, 42, WINDOW_CloseRestWindowBtn, (int)pBtnCancel, 0);
+ new OnCancel(350, 302, 106, 42, (int)pBtnCancel, 0);
continue;
case UIMSG_SaveLoadBtn:
- GUIWindow::Create(241, 302, 106, 42, WINDOW_SaveLoadBtn, (int)pBtnLoadSlot, 0);
+ new OnSaveLoad(241, 302, 106, 42, (int)pBtnLoadSlot, 0);
continue;
case UIMSG_SelectLoadSlot:
if (pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS)
@@ -490,7 +490,7 @@
}
v19 = (double)(signed int)uGammaPos * 0.1 + 0.6;
//pEngine->pGammaController->Initialize(v19);
- GUIWindow::Create(21, 161, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderLeft, (char *)1);
+ new OnButtonClick2(21, 161, 0, 0, (int)pBtn_SliderLeft, (char *)1);
pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0);
continue;
}
@@ -501,7 +501,7 @@
{
v21 = (double)(signed int)uGammaPos * 0.1 + 0.6;
//pEngine->pGammaController->Initialize(v21);
- GUIWindow::Create(213, 161, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderRight, (char *)1);
+ new OnButtonClick2(213, 161, 0, 0, (int)pBtn_SliderRight, (char *)1);
pAudioPlayer->PlaySound(SOUND_ClickMovingSelector, 0, 0, -1, 0, 0, 0, 0);
continue;
}
@@ -531,7 +531,7 @@
--uMusicVolimeMultiplier;
if ((char)uMusicVolimeMultiplier < 1)
uMusicVolimeMultiplier = 0;
- GUIWindow::Create(243, 216, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderLeft, (char *)1);
+ 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);
@@ -547,7 +547,7 @@
++uMusicVolimeMultiplier;
if ((char)uMusicVolimeMultiplier > 9)
uMusicVolimeMultiplier = 9;
- GUIWindow::Create(435, 216, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderRight, (char *)1);
+ 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)
@@ -572,7 +572,7 @@
--uSoundVolumeMultiplier;
if ((char)uSoundVolumeMultiplier < 1)
uSoundVolumeMultiplier = 0;
- GUIWindow::Create(243, 162, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderLeft, (char *)1);
+ 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);
@@ -589,7 +589,7 @@
//v168 = 1;
v24 = 435;
//v154 = (int)pBtn_SliderRight;
- GUIWindow::Create(v24, 162, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderRight, (char *)1);
+ new OnButtonClick2(v24, 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;
@@ -618,7 +618,7 @@
--uVoicesVolumeMultiplier;
if ((char)uVoicesVolumeMultiplier < 1)
uVoicesVolumeMultiplier = 0;
- GUIWindow::Create(243, 270, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderLeft, (char *)1);
+ 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);
@@ -629,7 +629,7 @@
++uVoicesVolumeMultiplier;
if ((char)uVoicesVolumeMultiplier > 8)
uVoicesVolumeMultiplier = 9;
- GUIWindow::Create(435, 270, 0, 0, WINDOW_PressedButton2, (int)pBtn_SliderRight, (char *)1);
+ 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);
@@ -687,8 +687,8 @@
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, uMessage, 0);
- pBooksWindow = GUIWindow::Create(493u, 355u, 0, 0, WINDOW_BooksWindow, (int)pBtn_Quests, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), uMessage, 0);
+ pBooksWindow = new GUIWindow_BooksWindow(493u, 355u, 0, 0, (int)pBtn_Quests, 0);
bFlashQuestBook = 0;
continue;
case UIMSG_OpenAutonotes:
@@ -697,8 +697,8 @@
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, uMessage, 0);
- pBooksWindow = GUIWindow::Create(527u, 353u, 0, 0, WINDOW_BooksWindow, (int)pBtn_Autonotes, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), uMessage, 0);
+ pBooksWindow = new GUIWindow_BooksWindow(527u, 353u, 0, 0, (int)pBtn_Autonotes, 0);
bFlashAutonotesBook = 0;
continue;
case UIMSG_OpenMapBook:
@@ -709,8 +709,8 @@
viewparams->sViewCenterX = pParty->vPosition.x;
viewparams->sViewCenterY = pParty->vPosition.y;
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, uMessage, 0);
- pBooksWindow = GUIWindow::Create(546, 353, 0, 0, WINDOW_BooksWindow, (int)pBtn_Maps, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), uMessage, 0);
+ pBooksWindow = new GUIWindow_BooksWindow(546, 353, 0, 0, (int)pBtn_Maps, 0);
continue;
case UIMSG_OpenCalendar:
DoThatMessageThing();
@@ -718,8 +718,8 @@
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, uMessage, 0);
- pBooksWindow = GUIWindow::Create(570, 354, 0, 0, WINDOW_BooksWindow, (int)pBtn_Calendar, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), uMessage, 0);
+ pBooksWindow = new GUIWindow_BooksWindow(570, 354, 0, 0, (int)pBtn_Calendar, 0);
continue;
case UIMSG_OpenHistoryBook:
DoThatMessageThing();
@@ -727,8 +727,8 @@
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, uMessage, 0);
- pBooksWindow = GUIWindow::Create(0x258u, 0x169u, 0, 0, WINDOW_BooksWindow, (int)pBtn_History, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), uMessage, 0);
+ pBooksWindow = new GUIWindow_BooksWindow(0x258u, 0x169u, 0, 0, (int)pBtn_History, 0);
bFlashHistoryBook = 0;
continue;
case UIMSG_Escape:// нажатие Escape and return to game
@@ -1256,7 +1256,7 @@
if (!pGUIWindow_Settings)//Draw Menu
{
dword_6BE138 = -1;
- GUIWindow::Create(0x25Au, 0x1C2u, 0, 0, WINDOW_PressedButton2, (int)pBtn_GameSettings, (char *)1);
+ new OnButtonClick2(0x25Au, 0x1C2u, 0, 0, (int)pBtn_GameSettings, (char *)1);
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
current_screen_type = SCREEN_MENU;
@@ -1289,7 +1289,7 @@
case UIMSG_ScrollNPCPanel://Right and Left button for NPCPanel
if (uMessageParam)
{
- GUIWindow::Create(626, 179, 0, 0, WINDOW_PressedButton2, (int)pBtn_NPCRight, 0);
+ new OnButtonClick2(626, 179, 0, 0, (int)pBtn_NPCRight, 0);
v37 = (pParty->pHirelings[0].pName != 0) + (pParty->pHirelings[1].pName != 0) + (unsigned __int8)pParty->field_70A - 2;
if (pParty->hirelingScrollPosition < v37)
{
@@ -1300,7 +1300,7 @@
}
else
{
- GUIWindow::Create(469, 179, 0, 0, WINDOW_PressedButton2, (int)pBtn_NPCLeft, 0);
+ new OnButtonClick2(469, 179, 0, 0, (int)pBtn_NPCLeft, 0);
/*if ( pParty->field_709 )
{
--pParty->field_709;
@@ -1658,12 +1658,12 @@
case UIMSG_OnCastTownPortal:
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, WINDOW_TownPortal, (char *)uMessageParam);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_TownPortal, (char *)uMessageParam);
continue;
case UIMSG_OnCastLloydsBeacon:
pAudioPlayer->StopChannels(-1, -1);
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Book, WINDOW_LloydsBeacon, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Book(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_LloydsBeacon, 0);
continue;
case UIMSG_LloydsBeacon_FlippingBtn:
@@ -2100,7 +2100,7 @@
__debugbreak();
if (!uActiveCharacter || current_screen_type != SCREEN_GAME)
continue;
- ptr_507BC8 = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_68, uMessageParam, 0);
+ __debugbreak();//ptr_507BC8 = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_68, uMessageParam, 0);
current_screen_type = SCREEN_19;
pEventTimer->Pause();
continue;
@@ -2140,7 +2140,7 @@
Player::_42ECB5_PlayerAttacksActor();
continue;
case UIMSG_ExitRest:
- GUIWindow::Create(pButton_RestUI_Exit->uX, pButton_RestUI_Exit->uY, 0, 0, WINDOW_CloseRestWindowBtn, (int)pButton_RestUI_Exit, pGlobalTXT_LocalizationStrings[81]);// "Exit Rest"
+ new OnCancel(pButton_RestUI_Exit->uX, pButton_RestUI_Exit->uY, 0, 0, (int)pButton_RestUI_Exit, pGlobalTXT_LocalizationStrings[81]);// "Exit Rest"
continue;
case UIMSG_Wait5Minutes:
if (_506F14_resting_stage == 2)
@@ -2149,7 +2149,7 @@
pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0);
continue;
}
- GUIWindow::Create(pButton_RestUI_Wait5Minutes->uX, pButton_RestUI_Wait5Minutes->uY, 0, 0, WINDOW_PressedButton2,
+ new OnButtonClick2(pButton_RestUI_Wait5Minutes->uX, pButton_RestUI_Wait5Minutes->uY, 0, 0,
(int)pButton_RestUI_Wait5Minutes, pGlobalTXT_LocalizationStrings[238]);// "Wait 5 Minutes"
_506F14_resting_stage = 1;
_506F18_num_minutes_to_sleep = 5;
@@ -2161,7 +2161,7 @@
pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0);
continue;
}
- GUIWindow::Create(pButton_RestUI_Wait1Hour->uX, pButton_RestUI_Wait1Hour->uY, 0, 0, WINDOW_PressedButton2,
+ new OnButtonClick2(pButton_RestUI_Wait1Hour->uX, pButton_RestUI_Wait1Hour->uY, 0, 0,
(int)pButton_RestUI_Wait1Hour, pGlobalTXT_LocalizationStrings[239]);// "Wait 1 Hour"
_506F14_resting_stage = 1;
_506F18_num_minutes_to_sleep = 60;
@@ -2297,7 +2297,7 @@
pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0);
continue;
}
- GUIWindow::Create(pButton_RestUI_WaitUntilDawn->uX, pButton_RestUI_WaitUntilDawn->uY, 0, 0, WINDOW_PressedButton2,
+ new OnButtonClick2(pButton_RestUI_WaitUntilDawn->uX, pButton_RestUI_WaitUntilDawn->uY, 0, 0,
(int)pButton_RestUI_WaitUntilDawn, pGlobalTXT_LocalizationStrings[237]);// "Wait until Dawn"
v97 = _494820_training_time(pParty->uCurrentHour);
_506F14_resting_stage = 1;
@@ -2340,7 +2340,7 @@
GameUI_SetFooterString(pTmpBuf.data());
continue;
case UIMSG_ClickInstallRemoveQuickSpellBtn:
- GUIWindow::Create(pBtn_InstallRemoveSpell->uX, pBtn_InstallRemoveSpell->uY, 0, 0, WINDOW_PressedButton2, (int)pBtn_InstallRemoveSpell, 0);
+ new OnButtonClick2(pBtn_InstallRemoveSpell->uX, pBtn_InstallRemoveSpell->uY, 0, 0, (int)pBtn_InstallRemoveSpell, 0);
if (!uActiveCharacter)
continue;
pPlayer10 = pPlayers[uActiveCharacter];
@@ -2467,10 +2467,10 @@
{
if (current_screen_type == SCREEN_GAME)
{
- GUIWindow::Create(476, 450, 0, 0, WINDOW_PressedButton2, (int)pBtn_CastSpell, 0);
+ new OnButtonClick2(476, 450, 0, 0, (int)pBtn_CastSpell, 0);
current_screen_type = SCREEN_SPELL_BOOK;
pEventTimer->Pause();
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_SpellBook, 0, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Spellbook(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pAudioPlayer->PlaySound(SOUND_48, 0, 0, -1, 0, 0, 0, 0);
viewparams->field_48 = 1;
continue;
@@ -2479,10 +2479,10 @@
&& (current_screen_type <= SCREEN_63 || current_screen_type > SCREEN_67))
{
pGUIWindow_CurrentMenu->Release();
- GUIWindow::Create(476, 450, 0, 0, WINDOW_PressedButton2, (int)pBtn_CastSpell, 0);
+ new OnButtonClick2(476, 450, 0, 0, (int)pBtn_CastSpell, 0);
current_screen_type = SCREEN_SPELL_BOOK;
pEventTimer->Pause();
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_SpellBook, 0, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_Spellbook(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pAudioPlayer->PlaySound(SOUND_48, 0, 0, -1, 0, 0, 0, 0);
viewparams->field_48 = 1;
continue;
@@ -2497,12 +2497,12 @@
++pIcons_LOD->uTexturePacksCount;
if (!pIcons_LOD->uNumPrevLoadedFiles)
pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
- GUIWindow::Create(0x230u, 0x1C2u, 0, 0, WINDOW_PressedButton2, (int)pBtn_QuickReference, 0);
+ new OnButtonClick2(0x230u, 0x1C2u, 0, 0, (int)pBtn_QuickReference, 0);
viewparams->bRedrawGameUI = 1;
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
current_screen_type = SCREEN_QUICK_REFERENCE;
- pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_QuickReference, 5, 0);
+ pGUIWindow_CurrentMenu = new GUIWindow_QuickReference(0, 0, window->GetWidth(), window->GetHeight(), 5, 0);
papredoll_dbrds[2] = pIcons_LOD->LoadTexture("BUTTEXI1", TEXTURE_16BIT_PALETTE);
pBtn_ExitCancel = pGUIWindow_CurrentMenu->CreateButton(0x187u, 0x13Cu, 0x4Bu, 0x21u, 1, 0, UIMSG_Escape, 0, 0,
pGlobalTXT_LocalizationStrings[79],// "Exit"
@@ -2521,7 +2521,7 @@
pRenderer->SaveScreenshot("gamma.pcx", 155, 117);
stru_506E40.LoadPCXFile("gamma.pcx", 0);
- GUIWindow::Create(0x25Au, 0x1C2u, 0, 0, WINDOW_PressedButton, (int)pBtn_GameSettings, 0);
+ new OnButtonClick(0x25Au, 0x1C2u, 0, 0, (int)pBtn_GameSettings, 0);
//LABEL_453:
/*if ( (signed int)pMessageQueue_50CBD0->uNumMessages >= 40 )
continue;
@@ -2538,11 +2538,11 @@
books_page_number = -1;
continue;
case UIMSG_ClickAwardsUpBtn:
- GUIWindow::Create(pBtn_Up->uX, pBtn_Up->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pBtn_Up, 0);
+ new OnButtonClick3(pBtn_Up->uX, pBtn_Up->uY, 0, 0, (int)pBtn_Up, 0);
BtnUp_flag = 1;
continue;
case UIMSG_ClickAwardsDownBtn:
- GUIWindow::Create(pBtn_Down->uX, pBtn_Down->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pBtn_Down, 0);
+ new OnButtonClick3(pBtn_Down->uX, pBtn_Down->uY, 0, 0, (int)pBtn_Down, 0);
BtnDown_flag = 1;
continue;
case UIMSG_ChangeDetaliz:
@@ -2573,17 +2573,17 @@
OnPaperdollLeftClick();
continue;
case UIMSG_ClickStatsBtn:
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 100;
+ current_character_screen_window = WINDOW_CharacterWindow_Stats;
CharacterUI_ReleaseButtons();
ReleaseAwardsScrollBar();
- GUIWindow::Create(pCharacterScreen_StatsBtn->uX, pCharacterScreen_StatsBtn->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pCharacterScreen_StatsBtn, 0);
+ new OnButtonClick3(pCharacterScreen_StatsBtn->uX, pCharacterScreen_StatsBtn->uY, 0, 0, (int)pCharacterScreen_StatsBtn, 0);
continue;
case UIMSG_ClickSkillsBtn:
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 101;
+ current_character_screen_window = WINDOW_CharacterWindow_Skills;
CharacterUI_ReleaseButtons();
ReleaseAwardsScrollBar();
CharacterUI_SkillsTab_CreateButtons();
- GUIWindow::Create(pCharacterScreen_SkillsBtn->uX, pCharacterScreen_SkillsBtn->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pCharacterScreen_SkillsBtn, 0);
+ new OnButtonClick3(pCharacterScreen_SkillsBtn->uX, pCharacterScreen_SkillsBtn->uY, 0, 0, (int)pCharacterScreen_SkillsBtn, 0);
continue;
case UIMSG_SkillUp:
pPlayer4 = pPlayers[uActiveCharacter];
@@ -2609,20 +2609,20 @@
ShowStatusBarString(v87, 2);
continue;
case UIMSG_ClickInventoryBtn:
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
+ current_character_screen_window = WINDOW_CharacterWindow_Inventory;
ReleaseAwardsScrollBar();
CharacterUI_ReleaseButtons();
- GUIWindow::Create(pCharacterScreen_InventoryBtn->uX, pCharacterScreen_InventoryBtn->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pCharacterScreen_InventoryBtn, 0);
+ new OnButtonClick3(pCharacterScreen_InventoryBtn->uX, pCharacterScreen_InventoryBtn->uY, 0, 0, (int)pCharacterScreen_InventoryBtn, 0);
continue;
case UIMSG_ClickExitCharacterWindowBtn:
- GUIWindow::Create(pCharacterScreen_ExitBtn->uX, pCharacterScreen_ExitBtn->uY, 0, 0, WINDOW_ExitCharacterWindow, (int)pCharacterScreen_ExitBtn, 0);
+ new OnCancel2(pCharacterScreen_ExitBtn->uX, pCharacterScreen_ExitBtn->uY, 0, 0, (int)pCharacterScreen_ExitBtn, 0);
continue;
case UIMSG_ClickAwardsBtn:
ReleaseAwardsScrollBar();
CharacterUI_ReleaseButtons();
CreateAwardsScrollBar();
- pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 102;
- GUIWindow::Create(pCharacterScreen_AwardsBtn->uX, pCharacterScreen_AwardsBtn->uY, 0, 0, WINDOW_CharactersPressedButton, (int)pCharacterScreen_AwardsBtn, 0);
+ current_character_screen_window = WINDOW_CharacterWindow_Awards;
+ new OnButtonClick3(pCharacterScreen_AwardsBtn->uX, pCharacterScreen_AwardsBtn->uY, 0, 0, (int)pCharacterScreen_AwardsBtn, 0);
FillAwardsData();
continue;
case UIMSG_ClickBooksBtn:
@@ -2679,7 +2679,7 @@
default:
continue;
}
- GUIWindow::Create(pButton->uX, pButton->uY, 0, 0, WINDOW_PressedButton, (int)pButton, (char *)1);
+ new OnButtonClick(pButton->uX, pButton->uY, 0, 0, (int)pButton, (char *)1);
continue;
case UIMSG_SelectCharacter:
DoThatMessageThing();
@@ -2810,12 +2810,12 @@
v116 = pRenderer->pActiveZBuffer[*(int *)uNumSeconds + pSRZBufferLineOffsets[pPoint3->y]];
}*/
pButton2 = (GUIButton *)(unsigned __int16)v116;
- GUIWindow::Create(0, 0, 0, 0, WINDOW_F, (int)pButton2, 0);
+ __debugbreak();//GUIWindow::Create(0, 0, 0, 0, WINDOW_F, (int)pButton2, 0);
continue;
case UIMSG_54:
__debugbreak();
pButton2 = (GUIButton *)uMessageParam;
- GUIWindow::Create(0, 0, 0, 0, WINDOW_22, (int)pButton2, 0);
+ __debugbreak();//GUIWindow::Create(0, 0, 0, 0, WINDOW_22, (int)pButton2, 0);
continue;
case UIMSG_Game_Action:
DoThatMessageThing();
@@ -2825,7 +2825,7 @@
if (current_screen_type)
continue;
pParty->uFlags |= 2u;
- GUIWindow::Create(519, 136, 0, 0, WINDOW_PressedButton2, (int)pBtn_ZoomOut, 0);
+ new OnButtonClick2(519, 136, 0, 0, (int)pBtn_ZoomOut, 0);
uNumSeconds = 131072;
v118 = 2 * viewparams->uMinimapZoom;
++viewparams->field_28;
@@ -2855,7 +2855,7 @@
if (current_screen_type)
continue;
pParty->uFlags |= 2u;
- GUIWindow::Create(574, 136, 0, 0, WINDOW_PressedButton2, (int)pBtn_ZoomIn, 0);
+ new OnButtonClick2(574, 136, 0, 0, (int)pBtn_ZoomIn, 0);
uNumSeconds = 32768;
v118 = (unsigned __int64)((signed __int64)(signed int)viewparams->uMinimapZoom << 15) >> 16;
--viewparams->field_28;
diff -r b6140dfeac27 -r c674d547cc7c Game/GameOver.cpp
--- a/Game/GameOver.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Game/GameOver.cpp Mon May 11 09:51:04 2015 +0200
@@ -58,7 +58,7 @@
pRenderer->EndScene();
free(_this.pPixels);
_this.pPixels = 0;
- window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ window_SpeakInHouse = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pWindow.uFrameX = 75;
pWindow.uFrameY = 60;
pWindow.uFrameWidth = 469;
diff -r b6140dfeac27 -r c674d547cc7c Game/MainMenu.cpp
--- a/Game/MainMenu.cpp Sun May 10 03:21:14 2015 +0200
+++ b/Game/MainMenu.cpp Mon May 11 09:51:04 2015 +0200
@@ -18,6 +18,15 @@
#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()
{
@@ -51,19 +60,19 @@
switch (pUIMessageType) // For buttons of window MainMenu
{
case UIMSG_MainMenu_ShowPartyCreationWnd:
- GUIWindow::Create(495, 172, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnNew, 0);
+ new OnButtonClick2(495, 172, 0, 0, (int)pMainMenu_BtnNew, 0);
SetCurrentMenuID(MENU_NEWGAME);
break;
case UIMSG_MainMenu_ShowLoadWindow:
- GUIWindow::Create(495, 227, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnLoad, 0);
+ new OnButtonClick2(495, 227, 0, 0, (int)pMainMenu_BtnLoad, 0);
SetCurrentMenuID(MENU_SAVELOAD);
break;
case UIMSG_ShowCredits:
- GUIWindow::Create(495, 282, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnCredits, 0);
+ new OnButtonClick2(495, 282, 0, 0, (int)pMainMenu_BtnCredits, 0);
SetCurrentMenuID(MENU_CREDITS);
break;
case UIMSG_ExitToWindows:
- GUIWindow::Create(495, 337, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnExit, 0);
+ new OnButtonClick2(495, 337, 0, 0, (int)pMainMenu_BtnExit, 0);
SetCurrentMenuID(MENU_EXIT_GAME);
break;
case UIMSG_PlayerCreation_SelectAttribute:
@@ -81,7 +90,7 @@
else --pParty->pPlayers[pParam].uVoiceID;
} while (pParty->pPlayers[pParam].GetSexByVoice() != pSex);
pButton = pCreationUI_BtnPressLeft2[pParam];
- GUIWindow::Create(pButton->uX, pButton->uY, 0, 0, WINDOW_PressedButton, (int)pButton, (char *)1);
+ 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;
@@ -92,7 +101,7 @@
pParty->pPlayers[pParam].uVoiceID = (pParty->pPlayers[pParam].uVoiceID + 1) % 20;
} while (pParty->pPlayers[pParam].GetSexByVoice() != pSex);
pButton = pCreationUI_BtnPressRight2[pParam];
- GUIWindow::Create(pButton->uX, pButton->uY, 0, 0, WINDOW_PressedButton, (int)pButton, (char *)1);
+ 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;
@@ -110,7 +119,7 @@
pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
% 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
uPlayerCreationUI_SelectedCharacter = v25;
- GUIWindow::Create(pCreationUI_BtnPressLeft[v25]->uX, pCreationUI_BtnPressLeft[v25]->uY, 0, 0, WINDOW_PressedButton, (int)pCreationUI_BtnPressLeft[v25], (char *)1);
+ 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;
@@ -126,17 +135,17 @@
pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
% 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam;
uPlayerCreationUI_SelectedCharacter = v21;
- GUIWindow::Create(pCreationUI_BtnPressRight[v21]->uX, pCreationUI_BtnPressRight[v21]->uY, 0, 0, WINDOW_PressedButton, (int)pCreationUI_BtnPressRight[v21], (char *)1);
+ 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:
- GUIWindow::Create(613, 393, 0, 0, WINDOW_PressedButton2, (int)pPlayerCreationUI_BtnPlus, (char *)1);
+ 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:
- GUIWindow::Create(523, 393, 0, 0, WINDOW_PressedButton2, (int)pPlayerCreationUI_BtnMinus, (char *)1);
+ 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;
@@ -150,14 +159,14 @@
pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
break;
case UIMSG_PlayerCreationClickOK:
- GUIWindow::Create(580, 431, 0, 0, WINDOW_PressedButton2, (int)pPlayerCreationUI_BtnOK, 0);
+ 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:
- GUIWindow::Create(527, 431, 0, 0, WINDOW_PressedButton2, (int)pPlayerCreationUI_BtnReset, 0);
+ new OnButtonClick2(527, 431, 0, 0, (int)pPlayerCreationUI_BtnReset, 0);
pParty->Reset();
break;
case UIMSG_PlayerCreationRemoveUpSkill:
@@ -218,7 +227,7 @@
}
break;
case UIMSG_SaveLoadBtn:
- GUIWindow::Create(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, WINDOW_SaveLoadBtn, (int)pBtnLoadSlot, 0);
+ new OnSaveLoad(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, (int)pBtnLoadSlot, 0);
break;
case UIMSG_DownArrow:
++pSaveListPosition;
@@ -227,24 +236,24 @@
if (pSaveListPosition < 1)
pSaveListPosition = 0;
pWindow = pGUIWindow_CurrentMenu;
- GUIWindow::Create(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 323, 0, 0, WINDOW_PressedButton2, (int)pBtnDownArrow, 0);
+ new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 323, 0, 0, (int)pBtnDownArrow, 0);
break;
case UIMSG_Cancel:
- GUIWindow::Create(pGUIWindow_CurrentMenu->uFrameX + 350, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, WINDOW_LoadGame_CancelBtn, (int)pBtnCancel, 0);
+ 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;
- GUIWindow::Create(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 197, 0, 0, WINDOW_PressedButton2, (int)pBtnArrowUp, 0);
+ new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 197, 0, 0, (int)pBtnArrowUp, 0);
break;
case UIMSG_AD:
- GUIWindow::Create(pMainMenu_BtnNew->uX, pMainMenu_BtnNew->uY, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnNew, 0);
+ new OnButtonClick2(pMainMenu_BtnNew->uX, pMainMenu_BtnNew->uY, 0, 0, (int)pMainMenu_BtnNew, 0);
SetCurrentMenuID(MENU_LoadingProcInMainMenu);
break;
case UIMSG_AE:
- GUIWindow::Create(pMainMenu_BtnExit->uX, pMainMenu_BtnExit->uY, 0, 0, WINDOW_PressedButton2, (int)pMainMenu_BtnExit, 0);
+ new OnButtonClick2(pMainMenu_BtnExit->uX, pMainMenu_BtnExit->uY, 0, 0, (int)pMainMenu_BtnExit, 0);
SetCurrentMenuID(MENU_DebugBLVLevel);
break;
case UIMSG_Escape:
@@ -298,8 +307,8 @@
{
pIcons_LOD->RemoveTexturesPackFromTextureList();
//crt_deconstruct_ptr_6A0118();
- pTexture_PCX.Release();
- pTexture_PCX.Load("title.pcx", 0);
+ main_menu_background.Release();
+ main_menu_background.Load("title.pcx", 0);
SetCurrentMenuID(MENU_MAIN);
v15 = 1;
pGUIWindow_CurrentMenu->Release();
@@ -355,7 +364,7 @@
pIcons_LOD->_inlined_sub2();
- pWindow_MainMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ 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);
@@ -366,8 +375,8 @@
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);
- pTexture_PCX.Release();
- pTexture_PCX.Load("title.pcx", 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);
@@ -380,9 +389,9 @@
{
if (current_screen_type != SCREEN_LOADGAME)
{
- pTexture_PCX.Release();
- pTexture_PCX.Load("lsave640.pcx", 0);
- pGUIWindow2 = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_MainMenu, 0, 0);
+ 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);
}
@@ -404,7 +413,7 @@
}
pRenderer->BeginScene();
- pRenderer->DrawTextureNew(0, 0, &pTexture_PCX);
+ pRenderer->DrawTextureNew(0, 0, &main_menu_background);
MainMenu_EventLoop();
GUI_UpdateWindows();
@@ -464,7 +473,7 @@
GUI_UpdateWindows();
pRenderer->EndScene();
pRenderer->Present();
- pTexture_PCX.Release();
+ main_menu_background.Release();
if (pGUIWindow2)
{
pGUIWindow2->Release();
diff -r b6140dfeac27 -r c674d547cc7c Game/MainMenu.h
--- a/Game/MainMenu.h Sun May 10 03:21:14 2015 +0200
+++ b/Game/MainMenu.h Mon May 11 09:51:04 2015 +0200
@@ -1,4 +1,7 @@
#pragma once
void MainMenu_Loop();
-void MainMenu_EventLoop();
\ No newline at end of file
+void MainMenu_EventLoop();
+
+
+extern struct RGBTexture main_menu_background;
\ No newline at end of file
diff -r b6140dfeac27 -r c674d547cc7c IO/Mouse.cpp
--- a/IO/Mouse.cpp Sun May 10 03:21:14 2015 +0200
+++ b/IO/Mouse.cpp Mon May 11 09:51:04 2015 +0200
@@ -473,10 +473,10 @@
y = pY;
for ( int i = uNumVisibleWindows; i >= 0; --i )
{
- if ( x >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameX && x <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameZ
- && y >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameY && y <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameW )
+ if ( x >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1]->uFrameX && x <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1]->uFrameZ
+ && y >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1]->uFrameY && y <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1]->uFrameW )
{
- for ( control = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; control; control = control->pNext )
+ for ( control = pWindowList[pVisibleWindowsIdxs[i] - 1]->pControlsHead; control; control = control->pNext )
{
if ( control->uButtonType == 1 )
{
@@ -604,30 +604,30 @@
//while ( 1 )
{
v3 = pVisibleWindowsIdxs[i] - 1;
- if (!pWindowList[v3].receives_keyboard_input)
+ if (!pWindowList[v3]->receives_keyboard_input)
continue;
switch (vkKey)
{
case VK_LEFT:
{
- v12 = pWindowList[v3].field_34;
- if ( pWindowList[v3].pCurrentPosActiveItem - pWindowList[v3].pStartingPosActiveItem - v12 >= 0 )
+ v12 = pWindowList[v3]->field_34;
+ if ( pWindowList[v3]->pCurrentPosActiveItem - pWindowList[v3]->pStartingPosActiveItem - v12 >= 0 )
{
v8 = current_screen_type == SCREEN_PARTY_CREATION;
- pWindowList[v3].pCurrentPosActiveItem -= v12;
+ pWindowList[v3]->pCurrentPosActiveItem -= v12;
if ( v8 )
{
pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
//v2 = pMessageQueue_50CBD0->uNumMessages;
}
}
- if ( pWindowList[v3].field_30 != 0 )
+ if ( pWindowList[v3]->field_30 != 0 )
{
break;
}
- pButton = pWindowList[v3].pControlsHead;
- v13 = pWindowList[v3].pCurrentPosActiveItem;
+ pButton = pWindowList[v3]->pControlsHead;
+ v13 = pWindowList[v3]->pCurrentPosActiveItem;
if ( v13 > 0)
{
do
@@ -642,23 +642,23 @@
}
case VK_RIGHT:
{
- v7 = pWindowList[v3].pCurrentPosActiveItem + pWindowList[v3].field_34;
- if ( v7 < pWindowList[v3].pNumPresenceButton + pWindowList[v3].pStartingPosActiveItem )
+ v7 = pWindowList[v3]->pCurrentPosActiveItem + pWindowList[v3]->field_34;
+ if ( v7 < pWindowList[v3]->pNumPresenceButton + pWindowList[v3]->pStartingPosActiveItem )
{
v8 = current_screen_type == SCREEN_PARTY_CREATION;
- pWindowList[v3].pCurrentPosActiveItem = v7;
+ pWindowList[v3]->pCurrentPosActiveItem = v7;
if ( v8 )
{
pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
//v2 = pMessageQueue_50CBD0->uNumMessages;
}
}
- if ( pWindowList[v3].field_30 != 0 )
+ if ( pWindowList[v3]->field_30 != 0 )
{
break;
}
- pButton = pWindowList[v3].pControlsHead;
- v10 = pWindowList[v3].pCurrentPosActiveItem;
+ pButton = pWindowList[v3]->pControlsHead;
+ v10 = pWindowList[v3]->pCurrentPosActiveItem;
if ( v10 > 0)
{
do
@@ -673,16 +673,16 @@
}
case VK_DOWN:
{
- v17 = pWindowList[v3].pStartingPosActiveItem;
- v18 = pWindowList[v3].pCurrentPosActiveItem;
- if ( v18 >= pWindowList[v3].pNumPresenceButton + v17 - 1 )
- pWindowList[v3].pCurrentPosActiveItem = v17;
+ v17 = pWindowList[v3]->pStartingPosActiveItem;
+ v18 = pWindowList[v3]->pCurrentPosActiveItem;
+ if ( v18 >= pWindowList[v3]->pNumPresenceButton + v17 - 1 )
+ pWindowList[v3]->pCurrentPosActiveItem = v17;
else
- pWindowList[v3].pCurrentPosActiveItem = v18 + 1;
- if ( pWindowList[v3].field_30 != 0 )
+ pWindowList[v3]->pCurrentPosActiveItem = v18 + 1;
+ if ( pWindowList[v3]->field_30 != 0 )
return true;
- pButton = pWindowList[v3].pControlsHead;
- v20 = pWindowList[v3].pCurrentPosActiveItem;
+ pButton = pWindowList[v3]->pControlsHead;
+ v20 = pWindowList[v3]->pCurrentPosActiveItem;
if ( v20 > 0)
{
do
@@ -698,13 +698,13 @@
case VK_SELECT:
{
pMouse->GetClickPos(&uClickX, &uClickY);
- v4 = pWindowList[v3].pStartingPosActiveItem;
- v28 = v4 + pWindowList[v3].pNumPresenceButton;
- if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
+ v4 = pWindowList[v3]->pStartingPosActiveItem;
+ v28 = v4 + pWindowList[v3]->pNumPresenceButton;
+ if ( v4 < v4 + pWindowList[v3]->pNumPresenceButton )
{
while ( 1 )
{
- pButton = pWindowList[v3].pControlsHead;
+ pButton = pWindowList[v3]->pControlsHead;
if ( v4 > 0 )
{
v6 = v4;
@@ -731,7 +731,7 @@
//continue;
}
}
- pWindowList[v3].pCurrentPosActiveItem = v4;
+ pWindowList[v3]->pCurrentPosActiveItem = v4;
return true;
}
//v2 = pMessageQueue_50CBD0->uNumMessages;
@@ -739,18 +739,18 @@
}
case VK_UP:
{
- v22 = pWindowList[v3].pCurrentPosActiveItem;
- v23 = pWindowList[v3].pStartingPosActiveItem;
+ v22 = pWindowList[v3]->pCurrentPosActiveItem;
+ v23 = pWindowList[v3]->pStartingPosActiveItem;
if ( v22 <= v23 )
- v24 = pWindowList[v3].pNumPresenceButton + v23 - 1;
+ v24 = pWindowList[v3]->pNumPresenceButton + v23 - 1;
else
v24 = v22 - 1;
- v8 = pWindowList[v3].field_30 == 0;
- pWindowList[v3].pCurrentPosActiveItem = v24;
+ v8 = pWindowList[v3]->field_30 == 0;
+ pWindowList[v3]->pCurrentPosActiveItem = v24;
if ( !v8 )
return true;
- pButton = pWindowList[v3].pControlsHead;
- v25 = pWindowList[v3].pCurrentPosActiveItem;
+ pButton = pWindowList[v3]->pControlsHead;
+ v25 = pWindowList[v3]->pCurrentPosActiveItem;
if ( v25 > 0)
{
do
@@ -765,13 +765,13 @@
}
case VK_NEXT:
{
- if ( pWindowList[v3].field_30 != 0 ) //crashed at skill draw
+ if ( pWindowList[v3]->field_30 != 0 ) //crashed at skill draw
{
pMouse->GetClickPos(&uClickX, &uClickY);
- v29 = pWindowList[v3].pStartingPosActiveItem + pWindowList[v3].pNumPresenceButton; //num buttons more than buttons
- for ( v4 = pWindowList[v3].pStartingPosActiveItem; v4 < v29; ++v4 )
+ v29 = pWindowList[v3]->pStartingPosActiveItem + pWindowList[v3]->pNumPresenceButton; //num buttons more than buttons
+ for ( v4 = pWindowList[v3]->pStartingPosActiveItem; v4 < v29; ++v4 )
{
- pButton = pWindowList[v3].pControlsHead;
+ pButton = pWindowList[v3]->pControlsHead;
if ( v4 > 0 )
{
for ( v15 = v4; v15; --v15 )
@@ -780,7 +780,7 @@
if ( (signed int)uClickX >= (signed int)pButton->uX && (signed int)uClickX <= (signed int)pButton->uZ
&& (signed int)uClickY >= (signed int)pButton->uY && (signed int)uClickY <= (signed int)pButton->uW )
{
- pWindowList[v3].pCurrentPosActiveItem = v4;
+ pWindowList[v3]->pCurrentPosActiveItem = v4;
return true;
}
}
diff -r b6140dfeac27 -r c674d547cc7c OSWindow.cpp
--- a/OSWindow.cpp Sun May 10 03:21:14 2015 +0200
+++ b/OSWindow.cpp Mon May 11 09:51:04 2015 +0200
@@ -796,11 +796,11 @@
SendMessageW(api_handle, WM_DESTROY, 0, 0);
break;
- case 104: //F4 button
+ /*case 104: //F4 button
pRenderer->ChangeBetweenWinFullscreenModes();
if (pArcomageGame->bGameInProgress)
pArcomageGame->field_F6 = 1;
- break;
+ break;*/
//SubMenu "Party"
case 40006: pParty->SetFood(pParty->uNumFoodRations + 20); break;