# HG changeset patch
# User a.parshin
# Date 1457135514 -7200
# Node ID d87bfbd3bb3b2397bcc3838c5e11e09107537a72
# Parent cf29f444ddd7c0b9f110c4677995096f002abb30
Step towards unification of Texture and RGBTexture (class Image)
diff -r cf29f444ddd7 -r d87bfbd3bb3b Arcomage/Arcomage.cpp
--- a/Arcomage/Arcomage.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Arcomage/Arcomage.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -3528,8 +3528,6 @@
ArcomageGame::ArcomageGame()
{
field_4 = 0;
- //RGBTexture::RGBTexture(&this->pGameBackground);
- //RGBTexture::RGBTexture(&v1->pSprites);
bGameInProgress = 0;
field_F9 = 0;
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Build/Visual Studio 2015/World of Might and Magic.vcxproj
--- a/Build/Visual Studio 2015/World of Might and Magic.vcxproj Mon Oct 05 00:19:13 2015 +0200
+++ b/Build/Visual Studio 2015/World of Might and Magic.vcxproj Sat Mar 05 01:51:54 2016 +0200
@@ -92,6 +92,7 @@
+
@@ -121,7 +122,6 @@
-
@@ -262,6 +262,7 @@
+
diff -r cf29f444ddd7 -r d87bfbd3bb3b Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters
--- a/Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters Mon Oct 05 00:19:13 2015 +0200
+++ b/Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters Sat Mar 05 01:51:54 2016 +0200
@@ -456,9 +456,6 @@
Engine
-
- Engine
-
Engine
@@ -618,6 +615,9 @@
Engine
+
+ Engine
+
@@ -1400,6 +1400,9 @@
Engine
+
+ Engine
+
diff -r cf29f444ddd7 -r d87bfbd3bb3b Build/Visual Studio 2015/World of Might and Magic.vcxproj.user
--- a/Build/Visual Studio 2015/World of Might and Magic.vcxproj.user Mon Oct 05 00:19:13 2015 +0200
+++ b/Build/Visual Studio 2015/World of Might and Magic.vcxproj.user Sat Mar 05 01:51:54 2016 +0200
@@ -4,6 +4,6 @@
$(OutDir)$(TargetName)$(TargetExt)
$(OutDir)
WindowsLocalDebugger
- -nomarg -window -nointro -nologo -nocd
+ -nomarg -window -nointro -nologo -nocd -novideo
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/AssetsManager.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/AssetsManager.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -0,0 +1,87 @@
+#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
+#include "Engine/LOD.h"
+
+AssetsManager *assets = new AssetsManager();
+
+
+
+Texture *AssetsManager::GetTexture(const char *name)
+{
+ //wchar_t wname[1024];
+ //swprintf(wname, L"%S", name);
+
+ return pIcons_LOD->LoadTexturePtr(name);
+}
+
+
+Texture *AssetsManager::GetTexture(const wchar_t *wname)
+{
+ char name[1024];
+ sprintf(name, "%S", name);
+
+ return this->GetTexture(name);
+}
+
+
+
+Image *AssetsManager::GetImage_16BitColorKey(const wchar_t *name, unsigned __int16 colorkey)
+{
+ Image *img = new Image();
+ if (!img->ColorKey_From_LOD(name, colorkey))
+ {
+ delete img;
+ img = nullptr;
+ }
+
+ return img;
+}
+
+Image *AssetsManager::GetImage_16BitAlpha(const wchar_t *name)
+{
+ Image *img = new Image();
+ if (!img->Alpha_From_LOD(name))
+ {
+ delete img;
+ img = nullptr;
+ }
+
+ return img;
+}
+
+Image *AssetsManager::GetImage_PCXFromIconsLOD(const wchar_t *name)
+{
+ Image *img = new Image();
+ if (!img->PCX_From_IconsLOD(name))
+ {
+ delete img;
+ img = nullptr;
+ }
+
+ return img;
+}
+
+Image *AssetsManager::GetImage_PCXFromNewLOD(const wchar_t *name)
+{
+ Image *img = new Image();
+ if (!img->PCX_From_NewLOD(name))
+ {
+ delete img;
+ img = nullptr;
+ }
+
+ return img;
+}
+
+
+Image *AssetsManager::GetImage_PCXFromFile(const wchar_t *name)
+{
+ Image *img = new Image();
+ if (!img->PCX_From_File(name))
+ {
+ delete img;
+ img = nullptr;
+ }
+
+ return img;
+}
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/AssetsManager.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/AssetsManager.h Sat Mar 05 01:51:54 2016 +0200
@@ -0,0 +1,23 @@
+#pragma once
+#include "Engine/LOD.h"
+
+
+class AssetsManager
+{
+ public:
+ AssetsManager() {}
+
+ Texture *GetTexture(const char *name);
+ Texture *GetTexture(const wchar_t *name);
+
+ Image *GetImage_PCXFromFile(const wchar_t *filename);
+ Image *GetImage_PCXFromIconsLOD(const wchar_t *name);
+ Image *GetImage_PCXFromNewLOD(const wchar_t *name);
+
+ Image *GetImage_16BitColorKey(const wchar_t *name, unsigned __int16 colorkey);
+ Image *GetImage_16BitAlpha(const wchar_t *name);
+
+ protected:
+};
+
+extern AssetsManager *assets;
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Engine.cpp
--- a/Engine/Engine.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Engine.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -999,7 +999,7 @@
static_assert(sizeof(LevelDecoration) == 0x20, "Wrong type size");
static_assert(sizeof(KeyboardActionMapping) == 0x20C, "Wrong type size");
static_assert(sizeof(UIAnimation) == 0xD, "Wrong type size");
- static_assert(sizeof(SpawnPointMM7) == 0x18, "Wrong type size");
+ //static_assert(sizeof(SpawnPointMM7) == 0x18, "Wrong type size");
static_assert(sizeof(ODMFace) == 0x134, "Wrong type size");
static_assert(sizeof(BSPNode) == 0x8, "Wrong type size");
static_assert(sizeof(BSPModel) == 0xBC, "Wrong type size");
@@ -1075,7 +1075,7 @@
static_assert(sizeof(LevelDecoration) == 32, "Wrong type size");
static_assert(sizeof(BLVLightMM7) == 16, "Wrong type size");
static_assert(sizeof(BSPNode) == 8, "Wrong type size");
- static_assert(sizeof(SpawnPointMM7) == 24, "Wrong type size");
+ //static_assert(sizeof(SpawnPointMM7) == 24, "Wrong type size");
static_assert(sizeof(DDM_DLV_Header) == 40, "Wrong type size");
static_assert(sizeof(Actor) == 836, "Wrong type size");
static_assert(sizeof(SpriteObject) == 112, "Wrong type size");
@@ -1372,7 +1372,7 @@
L"Files Missing", MB_ICONEXCLAMATION);
return false;
}
- pIcons_LOD->dword_011BA4 = 0;
+ pIcons_LOD->_011BA4_debug_paletted_pixels_uncompressed = false;
pEvents_LOD = new LODFile_IconsBitmaps;
if (!pEvents_LOD->Load("data\\events.lod", "icons"))
@@ -1745,6 +1745,35 @@
bool use_music_folder = false;
bool for_refactoring = false;
bool all_spells = true;
+bool bNoMargareth = false;
+
+void ParseCommandLine(const wchar_t *cmd)
+{
+ //if (wcsstr(pCmdLine, L"-usedefs"))
+ // bDebugResouces = 1;
+ if (wcsstr(cmd, L"-window"))
+ dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW;
+
+ if (wcsstr(cmd, L"-nointro"))
+ bNoIntro = true;//dword_6BE364_game_settings_1 |= 4;
+ if (wcsstr(cmd, L"-nologo"))
+ bNoLogo = true;//dword_6BE364_game_settings_1 |= 8;
+ if (wcsstr(cmd, L"-nosound"))
+ bNoSound = true; //dword_6BE364_game_settings_1 |= 0x10;
+
+ bWalkSound = ReadWindowsRegistryInt("WalkSound", 1) != 0;
+ if (wcsstr(cmd, L"-nowalksound"))
+ bWalkSound = false;//dword_6BE364_game_settings_1 |= 0x20;
+ if (wcsstr(cmd, L"-novideo"))
+ {
+ dword_6BE364_game_settings_1 |= GAME_SETTINGS_NO_HOUSE_ANIM;
+ bNoVideo = true;
+ }
+ if (wcsstr(cmd, L"-nocd"))
+ bNoCD = true;
+ if (wcsstr(cmd, L"-nomarg"))
+ bNoMargareth = true;
+}
//----- (00462C94) --------------------------------------------------------
bool MM_Main(const wchar_t *pCmdLine)
@@ -1754,36 +1783,8 @@
lua = new LuaVM;
lua->Initialize();
- bool bNoMargareth = false;
if (pCmdLine && *pCmdLine)
- {
- //if (wcsstr(pCmdLine, L"-usedefs"))
- // bDebugResouces = 1;
- if (wcsstr(pCmdLine, L"-window"))
- dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW;
-
- if (wcsstr(pCmdLine, L"-nointro"))
- bNoIntro = true;//dword_6BE364_game_settings_1 |= 4;
- if (wcsstr(pCmdLine, L"-nologo"))
- bNoLogo = true;//dword_6BE364_game_settings_1 |= 8;
- if (wcsstr(pCmdLine, L"-nosound"))
- bNoSound = true; //dword_6BE364_game_settings_1 |= 0x10;
-
- bWalkSound = ReadWindowsRegistryInt("WalkSound", 1) != 0;
- if (wcsstr(pCmdLine, L"-nowalksound"))
- bWalkSound = false;//dword_6BE364_game_settings_1 |= 0x20;
- if (wcsstr(pCmdLine, L"-novideo"))
- {
- dword_6BE364_game_settings_1 |= GAME_SETTINGS_NO_HOUSE_ANIM;
- bNoVideo = true;
- }
- if (wcsstr(pCmdLine, L"-nocd"))
- bNoCD = true;
- if (wcsstr(pCmdLine, L"-nomarg"))
- bNoMargareth = true;
- }
-
- //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );//Ritor1: for memory test
+ ParseCommandLine(pCmdLine);
if (!MM7_Initialize(640, 480))
{
@@ -1794,21 +1795,16 @@
pEventTimer->Pause();
- SetUserInterface(PartyAlignment_Neutral, false);
-
- for (uint i = 0; i < 20; ++i)
- pWindowList[i] = nullptr;
- uNumVisibleWindows = -1;
- memset(pVisibleWindowsIdxs.data(), 0, sizeof(pVisibleWindowsIdxs));
+ GUIWindow::InitializeGUI();
+
ShowLogoVideo();
//ShowIntroVideo_and_LoadingScreen();
- WriteWindowsRegistryInt("Ran once", 1);
+
dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000;
- //Ritor1: include
- if (use_MMT)
- MMT_MainMenu_Loop();
+ //if (use_MMT)
+ // MMT_MainMenu_Loop();
Log::Warning(L"MM: entering main loop");
while (1)
@@ -1840,6 +1836,9 @@
if (!CreateParty_Loop())
break;
+
+ pParty->pPickedItem.uItemID = 0;
+
strcpy(pCurrentMapName, pStartingMapName);
bFlashQuestBook = true;
pMediaPlayer->PlayFullscreenMovie(MOVIE_Emerald, true);
@@ -1914,22 +1913,6 @@
break;
}
}
- if (!bNoSound)
- {
- if (use_music_folder)
- {
- PlayAudio(L"Music\\14.mp3");
- alSourcef(mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]);
- }
- else if (pAudioPlayer->hAILRedbook)
- {
- pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f);
- AIL_redbook_stop(pAudioPlayer->hAILRedbook);
- unsigned int startms, end_ms;
- AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 14, &startms, &end_ms);
- AIL_redbook_play(pAudioPlayer->hAILRedbook, startms + 1, end_ms);
- }
- }
}
//lua_close(L);
pEngine->Deinitialize();
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/IRender.h
--- a/Engine/Graphics/IRender.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/IRender.h Sat Mar 05 01:51:54 2016 +0200
@@ -70,8 +70,8 @@
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, struct RGBTexture *a4) = 0;
+ virtual void DrawTextureNew(float u, float v, struct Image *) = 0;
+ virtual void DrawTextureAlphaNew(float u, float v, struct Image *) = 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;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Indoor.cpp
--- a/Engine/Graphics/Indoor.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Indoor.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -3000,10 +3000,11 @@
{
for (uint i = 0; i < pIndoor->uNumSpawnPoints; ++i )
{
- if ( pIndoor->pSpawnPoints[i].uKind == 3 )
- SpawnEncounter(map_info, &pIndoor->pSpawnPoints[i], 0, 0, 0);
+ auto spawn = pIndoor->pSpawnPoints + i;
+ if (spawn->IsMonsterSpawn())
+ SpawnEncounter(map_info, spawn, 0, 0, 0);
else
- map_info->SpawnRandomTreasure(&pIndoor->pSpawnPoints[i]);
+ map_info->SpawnRandomTreasure(spawn);
}
RespawnGlobalDecorations();
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Indoor.h
--- a/Engine/Graphics/Indoor.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Indoor.h Sat Mar 05 01:51:54 2016 +0200
@@ -344,6 +344,10 @@
unsigned __int16 uIndex;
unsigned __int16 uAttributes;
unsigned int uGroup;
+
+ inline bool IsMonsterSpawn() const { return uKind == 3; }
+ inline bool IsTreasureSpawn() const { return uKind != 3; }
+
};
#pragma pack(pop)
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Outdoor.cpp
--- a/Engine/Graphics/Outdoor.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Outdoor.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -852,7 +852,7 @@
}
//----- (0047CB57) --------------------------------------------------------
-int OutdoorLocationTerrain::_47CB57(int a1, int a2, int a3)
+int OutdoorLocationTerrain::_47CB57(unsigned char *pixels_8bit, int a2, int num_pixels)
{
signed int result; // eax@2
// unsigned __int16 *v5; // edx@3
@@ -896,9 +896,9 @@
v17 = v5;
v23 = 0.0;
a2a = 0;
- for ( i = 0; i < a3; ++i )
+ for ( i = 0; i < num_pixels; ++i )
{
- v9 = *(char *)(v8 + a1);
+ v9 = *(char *)(v8 + pixels_8bit);
if ( v9 )
{
v10 = v5[v9];
@@ -2202,7 +2202,7 @@
for ( uint i = 0; i < (signed int)pBitmaps_LOD->uNumLoadedFiles; ++i )
{
//if ( i != -1 ? (int)&pBitmaps_LOD->pTextures[i] : 0 )
- pBitmaps_LOD->pTextures[i].uDecompressedSize = this->pTerrain._47CB57((int)pBitmaps_LOD->pTextures[i].pLevelOfDetail0_prolly_alpha_mask,
+ pBitmaps_LOD->pTextures[i].uDecompressedSize = this->pTerrain._47CB57(pBitmaps_LOD->pTextures[i].paletted_pixels,
pBitmaps_LOD->pTextures[i].palette_id2,
pBitmaps_LOD->pTextures[i].uTextureWidth * pBitmaps_LOD->pTextures[i].uTextureHeight);
}
@@ -4515,21 +4515,12 @@
//v13 = 0;
for (uint i = 0; i < pOutdoor->uNumSpawnPoints; ++i)
{
- //v12 = 0;
- //while ( 1 )
- //{
SpawnPointMM7* spawn = pOutdoor->pSpawnPoints + i;
- //v6 = &pOutdoor->pSpawnPoints[v12 / 0x18];
- if (spawn->uKind == 3)
+
+ if (spawn->IsMonsterSpawn())
SpawnEncounter(v4, spawn, 0, 0, 0);
else
v4->SpawnRandomTreasure(spawn);
- //++v13;
- //v12 += 24;
- //if ( v13 >= (signed int)pOutdoor->uNumSpawnPoints )
- // break;
- //v5 = 0;
- //}
}
RespawnGlobalDecorations();
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Outdoor.h
--- a/Engine/Graphics/Outdoor.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Outdoor.h Sat Mar 05 01:51:54 2016 +0200
@@ -56,7 +56,7 @@
void _47C7A9();
void Release();
void FillDMap(int X, int Y, int W, int Z);
- int _47CB57(int a1, int a2, int a3);
+ int _47CB57(unsigned char *pixels_8bit, int a2, int num_pixels);
bool ZeroLandscape();
bool Initialize();
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Render.cpp
--- a/Engine/Graphics/Render.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Render.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -6375,75 +6375,72 @@
__debugbreak();
}
-void Render::DrawTextureNew(float u, float v, RGBTexture *a4)
-{
- DrawTextureRGB(640 * u, 480 * v, a4);
-}
-
-//----- (004A5BE3) --------------------------------------------------------
-void Render::DrawTextureRGB(unsigned int uOutX, unsigned int uOutY, RGBTexture *a4)
-{
- int v4; // edi@3
- unsigned __int16 *v6; // esi@3
- unsigned int v8; // eax@5
- unsigned int v9; // ebx@5
- unsigned int v11; // eax@7
- unsigned int v12; // ebx@8
- unsigned int v15; // eax@14
- int v19; // [sp+10h] [bp-8h]@3
- int v23; // [sp+28h] [bp+10h]@3
-
- if ( this->uNumSceneBegins && a4 )
- {
- v4 = a4->uWidth;
- //v5 = &this->pTargetSurface[uOutX + uOutY * this->uTargetSurfacePitch];
- v6 = a4->pPixels;
- v23 = a4->uHeight;
- v19 = v4;
- if ( this->bClip )
- {
- if ( (signed int)uOutX < (signed int)this->uClipX )
- {
- v8 = this->uClipX - uOutX;
- v9 = uOutX - this->uClipX;
- v8 *= 2;
- v4 += v9;
- v6 = (unsigned __int16 *)((char *)v6 + v8);
- //v5 = (unsigned __int16 *)((char *)v5 + v8);
- }
- if ( (signed int)uOutY < (signed int)this->uClipY )
- {
- v11 = this->uClipY - uOutY;
- v6 += v19 * v11;
- v23 += uOutY - this->uClipY;
- //v5 += this->uTargetSurfacePitch * v11;
- }
- v12 = max(this->uClipX, uOutX);
- if ( (signed int)(v4 + v12) > (signed int)this->uClipZ )
- {
- v4 = this->uClipZ - max(this->uClipX, uOutX);
- }
- v15 = max(this->uClipY, uOutY);
- if ( (signed int)(v15 + v23) > (signed int)this->uClipW )
- {
- v23 = this->uClipW - max(this->uClipY, uOutY);
- }
- }
-
- for (int y = 0; y < v23; y++)
- {
- for (int x = 0; x < v4; x++)
- {
- WritePixel16(uOutX + x, uOutY + y, *v6);
- //*v5 = *v6;
- //++v5;
- ++v6;
- }
- v6 += v19 - v4;
- //v5 += this->uTargetSurfacePitch - v4;
- }
- }
-}
+
+void Render::DrawTextureNew(float u, float v, Image *bmp)
+{
+ unsigned __int16 *v6; // esi@3
+ unsigned int v8; // eax@5
+ unsigned int v11; // eax@7
+ unsigned int v12; // ebx@8
+ unsigned int v15; // eax@14
+ int v19; // [sp+10h] [bp-8h]@3
+
+ if (!bmp)
+ return;
+
+ unsigned int uOutX = 640 * u;
+ unsigned int uOutY = 480 * v;
+
+ int width = bmp->GetWidth();
+ int height = bmp->GetHeight();
+ v6 = (unsigned __int16 *)bmp->GetPixels(IMAGE_FORMAT_R5G6B5);
+
+ //v5 = &this->pTargetSurface[uOutX + uOutY * this->uTargetSurfacePitch];
+ v19 = width;
+ if (this->bClip)
+ {
+ if ((signed int)uOutX < (signed int)this->uClipX)
+ {
+ v8 = this->uClipX - uOutX;
+ unsigned int v9 = uOutX - this->uClipX;
+ v8 *= 2;
+ width += v9;
+ v6 = (unsigned __int16 *)((char *)v6 + v8);
+ //v5 = (unsigned __int16 *)((char *)v5 + v8);
+ }
+ if ((signed int)uOutY < (signed int)this->uClipY)
+ {
+ v11 = this->uClipY - uOutY;
+ v6 += v19 * v11;
+ height += uOutY - this->uClipY;
+ //v5 += this->uTargetSurfacePitch * v11;
+ }
+ v12 = max(this->uClipX, uOutX);
+ if ((signed int)(width + v12) >(signed int)this->uClipZ)
+ {
+ width = this->uClipZ - max(this->uClipX, uOutX);
+ }
+ v15 = max(this->uClipY, uOutY);
+ if ((signed int)(v15 + height) > (signed int)this->uClipW)
+ {
+ height = this->uClipW - max(this->uClipY, uOutY);
+ }
+ }
+
+ for (int y = 0; y < height; y++)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ WritePixel16(uOutX + x, uOutY + y, *v6);
+ //*v5 = *v6;
+ //++v5;
+ ++v6;
+ }
+ v6 += v19 - width;
+ //v5 += this->uTargetSurfacePitch - v4;
+ }
+}
+
//----- (004A5D33) --------------------------------------------------------
void Render::CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, RGBTexture *pTexture)
@@ -6539,7 +6536,7 @@
if ( this->uNumSceneBegins && a4 && a4->pPalette16 )
{
//v4 = &this->pTargetSurface[a2 + a3 * this->uTargetSurfacePitch];
- v20 = a4->pLevelOfDetail0_prolly_alpha_mask;
+ v20 = a4->paletted_pixels;
v5 = a4->uTextureWidth;
v6 = a4->uTextureHeight;
v19 = a4->uTextureWidth;
@@ -7103,7 +7100,7 @@
{
v5 = pTexture->uTextureHeight;
//v6 = &this->pTargetSurface[a2 + a3 * this->uTargetSurfacePitch];
- v19 = pTexture->pLevelOfDetail0_prolly_alpha_mask;
+ v19 = pTexture->paletted_pixels;
v20 = pTexture->uTextureWidth;
v18 = pTexture->uTextureWidth;
int clipped_out_x = a2;
@@ -7202,7 +7199,7 @@
if ( this->uNumSceneBegins && a4 && a4->pPalette16 && a5 && a5->pPalette16 )
{
- v24 = a4->pLevelOfDetail0_prolly_alpha_mask;
+ v24 = a4->paletted_pixels;
Width = a4->uTextureWidth;
uHeight = a4->uTextureHeight;
int clipped_out_x = x;
@@ -7317,7 +7314,7 @@
{
if ( a5->pPalette16 )
{
- v28 = a4->pLevelOfDetail0_prolly_alpha_mask;
+ v28 = a4->paletted_pixels;
Width = a4->uTextureWidth;
Height = a4->uTextureHeight;
int clipped_out_x = a2;
@@ -7368,7 +7365,7 @@
{
if ( *v28 )
{
- v20 = *(&a5->pLevelOfDetail0_prolly_alpha_mask[x & a5->uWidthMinus1] + a5->uTextureWidth * (v27 & a5->uHeightMinus1));
+ v20 = *(&a5->paletted_pixels[x & a5->uWidthMinus1] + a5->uTextureWidth * (v27 & a5->uHeightMinus1));
if ( v20 >= a7 )
{
if ( v20 <= a8 )
@@ -7386,39 +7383,6 @@
}
v28 += a4->uTextureWidth - Width;
}
-
- /*if ( v24 > 0 )
- {
- v23 = v22 - v25;
- do
- {
- for ( i = 0; i < v25; ++v28 )
- {
- if ( *v28 )
- {
- v20 = *(&v9->pLevelOfDetail0_prolly_alpha_mask[i & v9->uWidthMinus1] + v9->uTextureWidth * (v27 & v9->uHeightMinus1));
- if ( v20 >= a7 )
- {
- if ( v20 <= a8 )
- {
- v21 = a7 + (a6 + v20) % (2 * (a8 - a7));
- if ( (a6 + v20) % (2 * (a8 - a7)) >= a8 - a7 )
- v21 = 2 * a8 - v21 - a7;
- v9 = a5;
- *v10 = a5->pPalette16[v21];
- }
- }
- }
- ++i;
- ++v10;
- }
- ++v27;
- v10 += this->uTargetSurfacePitch - v25;
- v28 += v23;
- }
- while ( v27 < v24 );
- }*/
-
}
}
}
@@ -7426,6 +7390,88 @@
}
}
+
+
+
+void Render::DrawTextureAlphaNew(float u, float v, Image *img)
+{
+ int uHeight; // ebx@4
+ unsigned int v11; // edx@9
+ unsigned int v12; // esi@12
+ unsigned int v13; // esi@15
+ unsigned int v15; // esi@18
+ //unsigned __int8 *v19; // [sp+18h] [bp-8h]@4
+ int uWidth; // [sp+1Ch] [bp-4h]@4
+
+ if (!uNumSceneBegins || !img)
+ return;
+
+ uHeight = img->GetHeight();
+ ///v19 = pTexture->paletted_pixels;
+ uWidth = img->GetWidth();
+
+ auto pixels = (const unsigned __int32 *)img->GetPixels(IMAGE_FORMAT_A8R8G8B8);
+
+ int uX = u * 640.0f;
+ int uY = v * 480.0f;
+ int clipped_out_x = uX;
+ int clipped_out_y = uY;
+ if (this->bClip)
+ {
+ if ((signed int)uX < (signed int)this->uClipX)
+ {
+ pixels += this->uClipX - uX;
+ uWidth += uX - this->uClipX;
+ clipped_out_x = uClipX;
+ }
+
+ uHeight = img->GetHeight();
+ if ((signed int)uY < (signed int)this->uClipY)
+ {
+ pixels += img->GetWidth() * (this->uClipY - uY);
+ uHeight = uY - this->uClipY + img->GetHeight();
+ clipped_out_y = uClipY;
+ }
+ v11 = this->uClipX;
+ if ((signed int)this->uClipX < (signed int)uX)
+ v11 = uX;
+
+ if ((signed int)(v11 + uWidth) >(signed int)this->uClipZ)
+ {
+ v12 = this->uClipX;
+ if ((signed int)this->uClipX < (signed int)uX)
+ v12 = uX;
+ uWidth = this->uClipZ - v12;
+ }
+ v13 = this->uClipY;
+ if ((signed int)this->uClipY < (signed int)uY)
+ v13 = uY;
+
+ if ((signed int)(uHeight + v13) >(signed int)this->uClipW)
+ {
+ v15 = this->uClipY;
+ if ((signed int)this->uClipY < (signed int)uY)
+ v15 = uY;
+ uHeight = this->uClipW - v15;
+ }
+ }
+
+ for (int y = 0; y < uHeight; ++y)
+ {
+ for (int x = 0; x < uWidth; ++x)
+ {
+ //if (*v19)
+ if (*pixels & 0xFF000000)
+ //WritePixel16(clipped_out_x + x, clipped_out_y + y, pTexture->pPalette16[*v19]);
+ WritePixel16(clipped_out_x + x, clipped_out_y + y, Color16((*pixels >> 16) & 0xFF, (*pixels >> 8) & 0xFF, *pixels & 0xFF));
+ ++pixels;
+ }
+ pixels += img->GetWidth() - uWidth;
+ }
+}
+
+
+
//----- (004A6274) --------------------------------------------------------
void Render::DrawTextureIndexedAlpha(unsigned int uX, unsigned int uY, Texture *pTexture)
{
@@ -7444,7 +7490,7 @@
if ( pTexture->pPalette16 )
{
uHeight = pTexture->uTextureHeight;
- v19 = pTexture->pLevelOfDetail0_prolly_alpha_mask;
+ v19 = pTexture->paletted_pixels;
uWidth = pTexture->uTextureWidth;
int clipped_out_x = uX;
@@ -7553,7 +7599,7 @@
v6 = uOutY;
v7 = pTexture->uTextureHeight;
pZBuffer = &this->pActiveZBuffer[uOutX + window->GetWidth() * uOutY];
- uOutYa = pTexture->pLevelOfDetail0_prolly_alpha_mask;
+ uOutYa = pTexture->paletted_pixels;
v8 = pTexture->uTextureWidth;
v20 = pTexture->uTextureWidth;
v19 = pTexture->uTextureWidth;
@@ -7718,7 +7764,7 @@
{
v5 = tex->uTextureHeight;
//pTarget = &this->pTargetSurface[uX + uY * this->uTargetSurfacePitch];
- v19 = tex->pLevelOfDetail0_prolly_alpha_mask;
+ v19 = tex->paletted_pixels;
v20 = tex->uTextureWidth;
v18 = tex->uTextureWidth;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Render.h
--- a/Engine/Graphics/Render.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Render.h Sat Mar 05 01:51:54 2016 +0200
@@ -252,8 +252,8 @@
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, struct RGBTexture *a4);
+ virtual void DrawTextureNew(float u, float v, struct Image *);
+ virtual void DrawTextureAlphaNew(float u, float v, struct Image *);
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);
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/RenderD3D11.cpp
--- a/Engine/Graphics/RenderD3D11.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/RenderD3D11.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -152,27 +152,28 @@
DrawTexture((float)x / window->GetWidth(), (float)y / window->GetHeight(), tex->uTextureWidth, tex->uTextureHeight, tex->d3d11_srv, ui_blend_solid);
}
+
+void RenderD3D11::DrawTextureAlphaNew(float u, float v, Image *img)
+{
+ __debugbreak();
+}
+
void RenderD3D11::DrawTextureIndexedAlpha(unsigned int uX, unsigned int uY, struct Texture *a4)
{
PrepareTextureIndexed(a4);
DrawTexture((float)uX / window->GetWidth(), (float)uY / window->GetHeight(), a4->uTextureWidth, a4->uTextureHeight, a4->d3d11_srv, ui_blend_alpha);
}
-void RenderD3D11::DrawTextureRGB(unsigned int uX, unsigned int uY, RGBTexture *a4)
-{
- PrepareTexture(a4);
- DrawTexture((float)uX / window->GetWidth(), (float)uY / window->GetHeight(), a4->uWidth, a4->uHeight, a4->d3d11_srv, ui_blend_solid);
-}
void RenderD3D11::DrawTextureNew(float u, float v, Texture *tex)
{
__debugbreak();
}
-void RenderD3D11::DrawTextureNew(float u, float v, RGBTexture *tex)
+
+void RenderD3D11::DrawTextureNew(float u, float v, Image *tex)
{
- PrepareTexture(tex);
- DrawTexture(u, v, tex->uWidth, tex->uHeight, tex->d3d11_srv, ui_blend_solid);
+ __debugbreak();
}
void RenderD3D11::DrawText(signed int uX, signed int uY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor)
@@ -817,7 +818,7 @@
return pShader;
}
-
+/*
void RenderD3D11::PrepareTexture(RGBTexture *p)
{
if (!p->d3d11_srv)
@@ -866,7 +867,7 @@
ErrorD3D(d3dd->CreateShaderResourceView(vram_texture, nullptr, (ID3D11ShaderResourceView **)&p->d3d11_srv));
vram_texture->Release();
}
-}
+}*/
@@ -904,7 +905,7 @@
for (unsigned int y = 0; y < desc->Height; ++y)
for (unsigned int x = 0; x < desc->Width; ++x)
{
- auto index = p->pLevelOfDetail0_prolly_alpha_mask[y * p->uTextureWidth + x];
+ auto index = p->paletted_pixels[y * p->uTextureWidth + x];
auto src = p->pPalette16[index];
auto dst = (unsigned int *)((char *)map.pData + y * map.RowPitch) + x;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/RenderD3D11.h
--- a/Engine/Graphics/RenderD3D11.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/RenderD3D11.h Sat Mar 05 01:51:54 2016 +0200
@@ -79,8 +79,8 @@
virtual void CreditsTextureScroll(unsigned int pX, unsigned int pY, int move_X, int move_Y, 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 DrawTextureNew(float u, float v, struct Image *);
+ virtual void DrawTextureAlphaNew(float u, float v, struct Image *);
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);
@@ -165,7 +165,6 @@
protected:
void DrawTexture(float u, float v, int texture_width, int texture_height, ID3D11ShaderResourceView *srv, ID3D11BlendState *blend);
- void PrepareTexture(struct RGBTexture *p);
void PrepareTextureIndexed(struct Texture *p);
ID3D11ShaderResourceView *PrepareFontTexture(unsigned char *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned short *pFontPalette, unsigned short uFaceColor, unsigned short uShadowColor);
ID3D11ShaderResourceView *PrepareFontTexture(unsigned char *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned short *pFontPalette);
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Texture.cpp
--- a/Engine/Graphics/Texture.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Texture.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -71,9 +71,11 @@
Texture *pTex_moon_2_2;
Texture *pTex_moon_ful;
-
-
-RGBTexture stru_506E40; // weak
+struct Texture *minimap_loop; // 5079D8
+struct Texture *_5079B4_compass; // 5079B4
+struct Texture *_5079C8_init_y; // 5079C8
+struct Texture *_5079CC_init_r; // 5079CC
+struct Texture *_5079D0_init_g; // 5079D0
int uTextureID_RestUI_restb4; // weak
@@ -89,15 +91,6 @@
int uTextureID_ar_up_up; // weak
-int uTextureID_507698; // weak
-int uTextureID_50769C; // weak
-int uTextureID_5076A0; // weak
-int uTextureID_5076A4; // weak
-int uTextureID_5076A8; // weak
-int uTextureID_5076AC; // weak
-int uTextureID_5076B0; // weak
-int uTextureID_5076B4; // weak
-int uTextureID_Parchment; // weak
unsigned int uTextureID_mhp_yel;
unsigned int uTextureID_mhp_red;
unsigned int uTextureID_mhp_grn;
@@ -157,17 +150,10 @@
unsigned int uTextureID_BarBlue;
-unsigned int uTextureID_right_panel; // weak
+Texture *right_panel;
+Texture *right_panel_loop;
-RGBTexture *pTexture_StatusBar = new RGBTexture;
-RGBTexture *pTexture_LeftFrame = new RGBTexture;
-RGBTexture *pTexture_TopFrame = new RGBTexture;
-RGBTexture *pTexture_BottomFrame = new RGBTexture;
-RGBTexture *pTexture_RightFrame = new RGBTexture;
-
-
-unsigned int uTextureID_right_panel_loop;
Texture *pTexture_Leather;
@@ -200,9 +186,6 @@
Texture pTex_F7CE30;
-RGBTexture stru_5773C4; // idb
-
-
@@ -371,7 +354,7 @@
pSource = this;
v1 = this;
v2 = malloc(this->uDecompressedSize);
- zlib::MemUnzip(v2, (unsigned int *)&pSource, v1->pLevelOfDetail0_prolly_alpha_mask, v1->uTextureSize);
+ zlib::MemUnzip(v2, (unsigned int *)&pSource, v1->paletted_pixels, v1->uTextureSize);
return v2;
}
@@ -387,12 +370,12 @@
__debugbreak();
}
- free(pLevelOfDetail0_prolly_alpha_mask);
+ free(paletted_pixels);
free(pPalette16);
free(pPalette24);
- pLevelOfDetail0_prolly_alpha_mask = nullptr;
+ paletted_pixels = nullptr;
pLevelOfDetail1 = nullptr;
//pLevelOfDetail2 = nullptr;
//pLevelOfDetail3 = nullptr;
@@ -505,7 +488,7 @@
uWidthLn2 = 0;
palette_id1 = 0;
palette_id2 = 0;
- pLevelOfDetail0_prolly_alpha_mask = nullptr;
+ paletted_pixels = nullptr;
//pLevelOfDetail3 = nullptr;
//pLevelOfDetail2 = nullptr;
pLevelOfDetail1 = nullptr;
@@ -1991,3 +1974,761 @@
return v2 | ((a2 & field_0.field_10) << field_48) | ((a2 & field_0.field_14) << field_50) | ((a2 & field_0.field_18) << field_58);
}
+
+
+
+
+typedef bool (*ImageFormatConverter)(unsigned int num_pixels, const void *src, void *dst);
+
+
+unsigned __int32 R5G6B5_to_A8R8G8B8(unsigned __int16 color16, unsigned char alpha)
+{
+ unsigned __int32 c = color16;
+ unsigned int b = (c & 31) * 8;
+ unsigned int g = ((c >> 5) & 63) * 4;
+ unsigned int r = ((c >> 11) & 31) * 8;
+
+ return ((unsigned int)alpha << 24) | (r << 16) | (g << 8) | b;
+}
+
+unsigned __int16 A8R8G8B8_to_R5G6B5(unsigned __int32 c)
+{
+ unsigned __int32 b = ((c & 0xFF) / 8) & 31;
+ unsigned __int32 g = (((c >> 8) & 0xFF) / 4) & 63;
+ unsigned __int32 r = (((c >> 16) & 0xFF) / 8) & 31;
+
+ return (unsigned __int16)(
+ (r << 11) | (g << 5) | b
+ );
+}
+
+bool Image_A8R8G8B8_to_R5G6B5(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
+{
+ auto src = (unsigned __int32 *)src_pixels;
+ auto dst = (unsigned __int16 *)dst_pixels;
+
+ for (unsigned int i = 0; i < num_pixels; ++i)
+ dst[i] = A8R8G8B8_to_R5G6B5(src[i]);
+
+ return true;
+}
+
+
+
+
+
+
+struct Alpha_LOD_Loader : public ImageLoader
+{
+ inline Alpha_LOD_Loader(LODFile_IconsBitmaps *lod, const wchar_t *name)
+ {
+ wcscpy(this->name, name);
+ this->lod = lod;
+ }
+
+ virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format);
+
+ wchar_t name[1024];
+ LODFile_IconsBitmaps *lod;
+};
+
+
+bool Alpha_LOD_Loader::Load(unsigned int *out_width, unsigned int *out_height, void **out_pixels, IMAGE_FORMAT *out_format)
+{
+ *out_width = 0;
+ *out_height = 0;
+ *out_pixels = nullptr;
+ *out_format = IMAGE_INVALID_FORMAT;
+
+ char namea[1024];
+ sprintf(namea, "%S", name);
+
+ auto tex = lod->GetTexture(lod->LoadTexture(namea, TEXTURE_16BIT_PALETTE));
+
+ if (tex->pPalette16 && tex->paletted_pixels)
+ {
+ auto palette = tex->pPalette16;
+ auto paletted_pixels = tex->paletted_pixels;
+
+ auto width = tex->uTextureWidth;
+ auto height = tex->uTextureHeight;
+ auto pixels = new unsigned __int32[width * height];
+ if (pixels)
+ {
+ for (unsigned int y = 0; y < height; ++y)
+ for (unsigned int x = 0; x < width; ++x)
+ {
+ auto index = paletted_pixels[y * width + x];
+ auto pixel = tex->pPalette16[index];
+ if (index == 0)
+ pixels[y * width + x] = 0x00000000;
+ else
+ {
+ extern unsigned __int32 Color32(unsigned __int16 color16);
+ pixels[y * width + x] = R5G6B5_to_A8R8G8B8(pixel, 255);
+ }
+ }
+ *out_width = width;
+ *out_height = height;
+ *out_pixels = pixels;
+ *out_format = IMAGE_FORMAT_A8R8G8B8;
+ }
+ }
+
+ return *out_pixels != nullptr;
+}
+
+
+
+
+
+
+
+
+struct ColorKey_LOD_Loader : public ImageLoader
+{
+ inline ColorKey_LOD_Loader(LODFile_IconsBitmaps *lod, const wchar_t *name, unsigned __int16 colorkey)
+ {
+ wcscpy(this->name, name);
+ this->colorkey = colorkey;
+ this->lod = lod;
+ }
+
+ virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format);
+
+ wchar_t name[1024];
+ unsigned __int16 colorkey;
+ LODFile_IconsBitmaps *lod;
+};
+
+
+
+bool ColorKey_LOD_Loader::Load(unsigned int *out_width, unsigned int *out_height, void **out_pixels, IMAGE_FORMAT *out_format)
+{
+ *out_width = 0;
+ *out_height = 0;
+ *out_pixels = nullptr;
+ *out_format = IMAGE_INVALID_FORMAT;
+
+ char namea[1024];
+ sprintf(namea, "%S", name);
+
+ auto tex = lod->GetTexture(lod->LoadTexture(namea, TEXTURE_16BIT_PALETTE));
+
+ if (tex->pPalette16 && tex->paletted_pixels)
+ {
+ auto palette = tex->pPalette16;
+ auto paletted_pixels = tex->paletted_pixels;
+
+ auto width = tex->uTextureWidth;
+ auto height = tex->uTextureHeight;
+ auto pixels = new unsigned __int32[width * height];
+ if (pixels)
+ {
+ for (unsigned int y = 0; y < height; ++y)
+ for (unsigned int x = 0; x < width; ++x)
+ {
+ auto pixel = tex->pPalette16[paletted_pixels[y * width + x]];
+ if (pixel == colorkey)
+ pixels[y * width + x] = 0x00000000;
+ else
+ {
+ extern unsigned __int32 Color32(unsigned __int16 color16);
+ pixels[y * width + x] = R5G6B5_to_A8R8G8B8(pixel, 255);
+ }
+ }
+ *out_width = width;
+ *out_height = height;
+ *out_pixels = pixels;
+ *out_format = IMAGE_FORMAT_A8R8G8B8;
+ }
+ }
+
+ return *out_pixels != nullptr;
+}
+
+
+
+
+
+
+struct PCX_Loader : public ImageLoader
+{
+ bool DecodePCX(const unsigned char *pcx_data, unsigned __int16 *pOutPixels, unsigned int *width, unsigned int *height);
+};
+
+bool PCX_Loader::DecodePCX(const unsigned char *pcx_data, unsigned __int16 *pOutPixels, unsigned int *width, unsigned int *height)
+{
+ // signed int result; // eax@2
+ unsigned char test_byte; // edx@3
+ unsigned int read_offset; // ebx@37
+ unsigned int row_position; // edi@40
+ unsigned char value; // cl@63
+ char count; // [sp+50h] [bp-Ch]@43
+ unsigned short current_line; // [sp+54h] [bp-8h]@38
+ unsigned short *dec_position;
+ unsigned short *temp_dec_position;
+ PCXHeader1 psx_head1;
+ PCXHeader2 psx_head2;
+ // short int width, height;
+ BYTE color_map[48]; // Colormap for 16-color images
+
+
+ memcpy(&psx_head1, pcx_data, 16);
+ memcpy(&color_map, pcx_data + 16, 48);
+ memcpy(&psx_head2, pcx_data + 64, 6);
+
+
+ if (psx_head1.bpp != 8)
+ return 3;
+ *width = (short int)(psx_head1.right - psx_head1.left + 1); // word @ 000014
+ *height = (short int)(psx_head1.bottom - psx_head1.up + 1); // word @ 000016
+
+
+ unsigned int uNumPixels = *width * *height; // dword @ 000010
+
+ memset(pOutPixels, 0, uNumPixels * sizeof(__int16));
+ short i = 1;
+ while ((1 << i) != *width)
+ {
+ ++i;
+ if (i >= 15)
+ break;
+ }
+
+ auto field_18 = i;
+ short i_ = 1;
+ while ((1 << i_) != *height)
+ {
+ ++i_;
+ if (i_ >= 15)
+ break;
+ }
+
+ auto field_1A = i_;
+ short field_1C = 0;
+ switch (field_18)
+ {
+ case 2: field_1C = 3; break;
+ case 3: field_1C = 7; break;
+ case 4: field_1C = 15; break;
+ case 5: field_1C = 31; break;
+ case 6: field_1C = 63; break;
+ case 7: field_1C = 127; break;
+ case 8: field_1C = 255; break;
+ case 9: field_1C = 511; break;
+ case 10: field_1C = 1023; break;
+ case 11: field_1C = 2047; break;
+ case 12: field_1C = 4095; break;
+ }
+
+ short field_1E = 0;
+ switch (field_1A)
+ {
+ case 2: field_1E = 3; break;
+ case 3: field_1E = 7; break;
+ case 4: field_1E = 15; break;
+ case 5: field_1E = 31; break;
+ case 6: field_1E = 63; break;
+ case 7: field_1E = 127; break;
+ case 8: field_1E = 255; break;
+ case 9: field_1E = 511; break;
+ case 10: field_1E = 1023; break;
+ case 11: field_1E = 2047; break;
+ case 12: field_1E = 4095; break;
+ }
+
+ unsigned int r_mask = 0xF800;
+ unsigned int num_r_bits = 5;
+ unsigned int g_mask = 0x07E0;
+ unsigned int num_g_bits = 6;
+ unsigned int b_mask = 0x001F;
+ unsigned int num_b_bits = 5;
+ //При сохранении изображения подряд идущие пиксели одинакового цвета объединяются и вместо указания цвета для каждого пикселя
+ //указывается цвет группы пикселей и их количество.
+ read_offset = 128;
+ if (psx_head2.planes != 3)
+ return 0;
+ current_line = 0;
+ if (height > 0)
+ {
+ dec_position = pOutPixels;
+ do
+ {
+ temp_dec_position = dec_position;
+ row_position = 0;
+ //decode red line
+ if (psx_head2.pitch)
+ {
+ do
+ {
+ test_byte = pcx_data[read_offset];
+ ++read_offset;
+ if ((test_byte & 0xC0) == 0xC0)//имеется ли объединение
+ {
+ value = pcx_data[read_offset];
+ ++read_offset;
+
+ if ((test_byte & 0x3F) > 0)
+ {
+ count = test_byte & 0x3F;//количество одинаковых пикселей
+ do
+ {
+ ++row_position;
+ //*temp_dec_position =0xFF000000;
+ //*temp_dec_position|=(unsigned long)value<<16;
+ *temp_dec_position |= r_mask & ((unsigned __int8)value << (num_g_bits + num_r_bits + num_b_bits - 8));
+ temp_dec_position++;
+ if (row_position == psx_head2.pitch)
+ break;
+ } while (count-- != 1);
+ }
+ }
+ else
+ {
+ ++row_position;
+ //*temp_dec_position =0xFF000000;
+ //*temp_dec_position|= (unsigned long)test_byte<<16;
+
+ *temp_dec_position |= r_mask & ((unsigned __int8)test_byte << (num_g_bits + num_r_bits + num_b_bits - 8));
+
+ temp_dec_position++;
+ }
+
+ } while (row_position < psx_head2.pitch);
+ }
+
+ temp_dec_position = dec_position;
+ row_position = 0;
+ //decode green line
+ while (row_position < psx_head2.pitch)
+ {
+ test_byte = *(pcx_data + read_offset);
+ ++read_offset;
+ if ((test_byte & 0xC0) == 0xC0)
+ {
+ value = *(pcx_data + read_offset);
+ ++read_offset;
+ if ((test_byte & 0x3F) > 0)
+ {
+ count = test_byte & 0x3F;
+ do
+ {
+ //*temp_dec_position|= (unsigned int)value<<8;
+ //temp_dec_position++;
+
+ *temp_dec_position |= g_mask & (unsigned __int16)((unsigned __int8)value << (num_g_bits + num_b_bits - 8));
+
+ temp_dec_position++;
+ ++row_position;
+ if (row_position == psx_head2.pitch)
+ break;
+
+ } while (count-- != 1);
+ }
+ }
+ else
+ {
+ //*temp_dec_position |=(unsigned int) test_byte<<8;
+ //temp_dec_position++;
+
+ *temp_dec_position |= g_mask & (unsigned __int16)((unsigned __int8)test_byte << (num_g_bits + num_b_bits - 8));
+ temp_dec_position++;
+ ++row_position;
+ }
+ }
+
+ temp_dec_position = dec_position;
+ row_position = 0;
+ //decode blue line
+ while (row_position < psx_head2.pitch)
+ {
+ test_byte = *(pcx_data + read_offset);
+ read_offset++;
+ if ((test_byte & 0xC0) == 0xC0)
+ {
+ value = *(pcx_data + read_offset);
+ ++read_offset;
+ if ((test_byte & 0x3F) > 0)
+ {
+ count = test_byte & 0x3F;
+ do
+ {
+ //*temp_dec_position|= value;
+ //temp_dec_position++;
+
+ *temp_dec_position |= value >> (8 - num_b_bits);
+ temp_dec_position++;
+
+ ++row_position;
+ if (row_position == psx_head2.pitch)
+ break;
+ } while (count-- != 1);
+ }
+ }
+ else
+ {
+ //*temp_dec_position|= test_byte;
+ //temp_dec_position++;
+ *temp_dec_position |= test_byte >> (8 - num_b_bits);
+ temp_dec_position++;
+
+ ++row_position;
+ }
+
+ }
+ ++current_line;
+ dec_position += *width;
+ } while (current_line < *height);
+ }
+ return true;
+}
+
+
+
+
+struct PCX_File_Loader : public PCX_Loader
+{
+ inline PCX_File_Loader(LODFile_IconsBitmaps *lod, const wchar_t *filename)
+ {
+ wcscpy(this->name, filename);
+ this->lod = lod;
+ }
+
+ virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format);
+
+ wchar_t name[1024];
+ LODFile_IconsBitmaps *lod;
+};
+
+
+
+bool PCX_File_Loader::Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format)
+{
+ FILE *file; // eax@1
+ char color_map[48]; // [sp+Ch] [bp-98h]@7
+ PCXHeader1 header1; // [sp+84h] [bp-20h]@7
+ PCXHeader2 header2; // [sp+94h] [bp-10h]@7
+
+ *width = 0;
+ *height = 0;
+ *pixels = nullptr;
+ *format = IMAGE_INVALID_FORMAT;
+
+ char namea[1024];
+ sprintf(namea, "%S", name);
+
+ file = fopen(namea, "rb");
+ if (!file)
+ {
+ Log::Warning(L"Unable to load %s", name);
+ return false;
+ }
+
+ fseek(file, 0, SEEK_END);
+ int filesize = ftell(file);
+ fseek(file, 0, SEEK_SET);
+
+ auto file_image = new unsigned char[filesize];
+ fread(file_image, 1, filesize, file);
+ fclose(file);
+
+
+ memcpy(&header1, file_image, 0x10u);
+ memcpy(color_map, file_image + 16, 0x30u);
+ memcpy(&header2, file_image + 64, 6);
+ if (header1.bpp != 8)
+ {
+ delete[] file_image;
+ return false;
+ }
+
+ *width = header1.right - header1.left + 1;
+ *height = header1.bottom - header1.up + 1;
+ unsigned int num_pixels = *width * *height;
+ *pixels = new unsigned short[num_pixels + 2];
+
+ if (pixels)
+ {
+ if (!this->DecodePCX(file_image, (unsigned __int16 *)*pixels, width, height))
+ {
+ delete[] * pixels;
+ *pixels = nullptr;
+ }
+ else
+ *format = IMAGE_FORMAT_R5G6B5;
+ }
+
+ delete[] file_image;
+
+ return *pixels != nullptr;
+}
+
+
+
+
+struct PCX_LOD_Loader : public PCX_Loader
+{
+ inline PCX_LOD_Loader(LOD::File *lod, const wchar_t *name)
+ {
+ wcscpy(this->name, name);
+ this->lod = lod;
+ }
+
+ virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format);
+
+ wchar_t name[1024];
+ LOD::File *lod;
+};
+
+
+
+bool PCX_LOD_Loader::Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format)
+{
+ FILE *file; // eax@1
+ void *v6; // ebx@5
+ char color_map[48]; // [sp+Ch] [bp-98h]@7
+ Texture DstBuf; // [sp+3Ch] [bp-68h]@1
+ PCXHeader1 header1; // [sp+84h] [bp-20h]@7
+ PCXHeader2 header2; // [sp+94h] [bp-10h]@7
+ size_t Count; // [sp+A0h] [bp-4h]@4
+ unsigned char *Str1a; // [sp+ACh] [bp+8h]@5
+
+ *width = 0;
+ *height = 0;
+ *pixels = nullptr;
+ *format = IMAGE_INVALID_FORMAT;
+
+ char namea[1024];
+ sprintf(namea, "%S", name);
+
+ file = lod->FindContainer(namea, 0);
+ if (!file)
+ {
+ Log::Warning(L"Unable to load %s", name);
+ return false;
+ }
+
+ fread(&DstBuf, 1, 0x30u, file);
+ Count = DstBuf.uTextureSize;
+ if (DstBuf.uDecompressedSize)
+ {
+ Str1a = (unsigned char *)malloc(DstBuf.uDecompressedSize);
+ v6 = malloc(DstBuf.uTextureSize);
+ fread(v6, 1, Count, file);
+ zlib::MemUnzip(Str1a, &DstBuf.uDecompressedSize, v6, DstBuf.uTextureSize);
+ DstBuf.uTextureSize = DstBuf.uDecompressedSize;
+ free(v6);
+ }
+ else
+ {
+ Str1a = (unsigned char *)malloc(DstBuf.uTextureSize);
+ fread(Str1a, 1, Count, file);
+ }
+
+ memcpy(&header1, Str1a, 0x10u);
+ memcpy(color_map, Str1a + 16, 0x30u);
+ memcpy(&header2, Str1a + 64, 6);
+ if (header1.bpp != 8)
+ {
+ free(Str1a);
+ return false;
+ }
+
+ *width = header1.right - header1.left + 1;
+ *height = header1.bottom - header1.up + 1;
+ unsigned int num_pixels = *width * *height;
+ *pixels = new unsigned short[num_pixels + 2];
+
+ if (pixels)
+ {
+ if (!this->DecodePCX(Str1a, (unsigned __int16 *)*pixels, width, height))
+ {
+ delete[] *pixels;
+ *pixels = nullptr;
+ }
+ else
+ *format = IMAGE_FORMAT_R5G6B5;
+ }
+
+ free(Str1a);
+
+ return *pixels != nullptr;
+}
+
+
+
+
+
+
+bool Image::PCX_From_IconsLOD(const wchar_t *name)
+{
+ loader = new PCX_LOD_Loader(pIcons_LOD, name);
+
+ if (!lazy_initialization)
+ this->LoadImageData();
+
+ return true;
+}
+
+bool Image::PCX_From_NewLOD(const wchar_t *name)
+{
+ loader = new PCX_LOD_Loader(pNew_LOD, name);
+
+ if (!lazy_initialization)
+ this->LoadImageData();
+
+ return true;
+}
+
+bool Image::PCX_From_File(const wchar_t *filename)
+{
+ loader = new PCX_File_Loader(pIcons_LOD, filename);
+
+ if (!lazy_initialization)
+ this->LoadImageData();
+
+ return true;
+}
+
+bool Image::Alpha_From_LOD(const wchar_t *name)
+{
+ loader = new Alpha_LOD_Loader(pIcons_LOD, name);
+
+ if (!lazy_initialization)
+ this->LoadImageData();
+
+ return true;
+}
+
+
+
+bool Image::ColorKey_From_LOD(const wchar_t *name, unsigned __int16 colorkey)
+{
+ loader = new ColorKey_LOD_Loader(pIcons_LOD, name, colorkey);
+
+ if (!lazy_initialization)
+ this->LoadImageData();
+
+ return true;
+}
+
+bool Image::LoadImageData()
+{
+ if (!initialized)
+ {
+ void *pixels;
+
+ initialized = loader->Load(&width, &height, &pixels, &native_format);
+ if (initialized && native_format != IMAGE_INVALID_FORMAT)
+ this->pixels[native_format] = pixels;
+ }
+
+ return initialized;
+}
+
+
+unsigned int Image::GetWidth()
+{
+ if (!initialized)
+ LoadImageData();
+
+ if (initialized)
+ return width;
+ return 0;
+}
+
+unsigned int Image::GetHeight()
+{
+ if (!initialized)
+ LoadImageData();
+
+ if (initialized)
+ return height;
+ return 0;
+}
+
+const void *Image::GetPixels(IMAGE_FORMAT format)
+{
+ if (!initialized)
+ LoadImageData();
+
+ if (initialized)
+ {
+ if (pixels[format])
+ return pixels[format];
+
+ auto native_pixels = pixels[native_format];
+ if (native_pixels)
+ {
+ static ImageFormatConverter converters[IMAGE_NUM_FORMATS][IMAGE_NUM_FORMATS] =
+ {
+ // IMAGE_FORMAT_R5G6B5 ->
+ {
+ nullptr, // IMAGE_FORMAT_R5G6B5
+ nullptr, // IMAGE_FORMAT_A1R5G5B5
+ nullptr // IMAGE_FORMAT_A8R8G8B8
+ },
+
+ // IMAGE_FORMAT_A1R5G5B5 ->
+ {
+ nullptr, // IMAGE_FORMAT_R5G6B5
+ nullptr, // IMAGE_FORMAT_A1R5G5B5
+ nullptr // IMAGE_FORMAT_A8R8G8B8
+ },
+
+ // IMAGE_FORMAT_A8R8G8B8 ->
+ {
+ Image_A8R8G8B8_to_R5G6B5, // IMAGE_FORMAT_R5G6B5
+ nullptr, // IMAGE_FORMAT_A1R5G5B5
+ nullptr // IMAGE_FORMAT_A8R8G8B8
+ },
+ };
+
+ ImageFormatConverter cvt = converters[native_format][format];
+ if (cvt)
+ {
+ unsigned int num_pixels = width * height;
+
+ void *cvt_pixels = new unsigned char[num_pixels * IMAGE_FORMAT_BytesPerPixel(format)];
+ if (cvt(width * height, native_pixels, cvt_pixels))
+ {
+ return pixels[format] = cvt_pixels;
+ }
+ else
+ {
+ delete[] cvt_pixels;
+ cvt_pixels = nullptr;
+ }
+ }
+ }
+ }
+ return nullptr;
+}
+
+
+bool Image::Release()
+{
+ if (initialized)
+ {
+ if (loader)
+ {
+ delete loader;
+ loader = nullptr;
+ }
+
+ for (unsigned int i = 0; i < IMAGE_NUM_FORMATS; ++i)
+ if (pixels[i])
+ {
+ delete[] pixels[i];
+ pixels[i] = nullptr;
+ }
+
+ native_format = IMAGE_INVALID_FORMAT;
+ width = 0;
+ height = 0;
+ }
+
+ delete this;
+ return true;
+}
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/Graphics/Texture.h
--- a/Engine/Graphics/Texture.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/Graphics/Texture.h Sat Mar 05 01:51:54 2016 +0200
@@ -1,7 +1,83 @@
#pragma once
+#include "Engine/Engine.h"
+
#include
#include
+enum IMAGE_FORMAT
+{
+ IMAGE_FORMAT_R5G6B5 = 0,
+ IMAGE_FORMAT_A1R5G5B5,
+ IMAGE_FORMAT_A8R8G8B8,
+
+ IMAGE_NUM_FORMATS,
+ IMAGE_INVALID_FORMAT = -1,
+};
+
+
+inline unsigned int IMAGE_FORMAT_BytesPerPixel(IMAGE_FORMAT format)
+{
+ switch (format)
+ {
+ case IMAGE_FORMAT_R5G6B5: return 2;
+ case IMAGE_FORMAT_A1R5G5B5: return 2;
+ case IMAGE_FORMAT_A8R8G8B8: return 4;
+
+ default:
+ Error("Invalid format: %d", format);
+ return 0;
+ }
+}
+
+
+struct ImageLoader
+{
+ virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format) = 0;
+};
+
+
+
+struct Image
+{
+ inline Image(bool lazy_initialization = true):
+ lazy_initialization(lazy_initialization), initialized(false),
+ width(0), height(0), native_format(IMAGE_INVALID_FORMAT),
+ loader(nullptr)
+ {
+ for (unsigned int i = 0; i < IMAGE_NUM_FORMATS; ++i)
+ pixels[i] = 0;
+ }
+
+
+ bool Image_From_LOD(const wchar_t *name);
+ bool ColorKey_From_LOD(const wchar_t *name, unsigned __int16 colorkey);
+ bool Alpha_From_LOD(const wchar_t *name);
+
+ bool PCX_From_IconsLOD(const wchar_t *name);
+ bool PCX_From_NewLOD(const wchar_t *name);
+ bool PCX_From_File(const wchar_t *filename);
+
+
+ unsigned int GetWidth();
+ unsigned int GetHeight();
+ const void *GetPixels(IMAGE_FORMAT format);
+
+ bool Release();
+
+
+ protected:
+ bool lazy_initialization;
+ bool initialized;
+ ImageLoader *loader;
+
+ unsigned int width;
+ unsigned int height;
+ IMAGE_FORMAT native_format;
+ void *pixels[IMAGE_NUM_FORMATS];
+
+ bool LoadImageData();
+};
+
/* 194 */
@@ -53,8 +129,9 @@
short palette_id1;
short palette_id2;
unsigned int uDecompressedSize;
- int pBits;
- unsigned __int8 *pLevelOfDetail0_prolly_alpha_mask;
+ int pBits; // 0x0002 - generate mipmaps
+ // 0x0200 - 0th palette entry is transparent, else colorkey (7FF)
+ unsigned __int8 *paletted_pixels;
unsigned __int8 *pLevelOfDetail1;
/*unsigned __int8 *pLevelOfDetail2;*/ struct ID3D11ShaderResourceView *d3d11_srv; // replace ol SW stuff with new fields to keep data integrity
/*unsigned __int8 *pLevelOfDetail3;*/ struct D3D11_TEXTURE2D_DESC *d3d11_desc;
@@ -127,7 +204,7 @@
-extern std::array pSavegameThumbnails;
+extern std::array pSavegameThumbnails;
extern std::array pTexture_LloydBeacons;
extern struct Texture *pTexture_50635C;
extern struct Texture *pTex_book_button8_off;
@@ -171,9 +248,11 @@
extern struct Texture *pTex_moon_2_2;
extern struct Texture *pTex_moon_ful;
-
-
-extern RGBTexture stru_506E40; // weak
+extern struct Texture *minimap_loop; // 5079D8
+extern struct Texture *_5079B4_compass; // 5079B4
+extern struct Texture *_5079C8_init_y; // 5079C8
+extern struct Texture *_5079CC_init_r; // 5079CC
+extern struct Texture *_5079D0_init_g; // 5079D0
extern int uTextureID_RestUI_restb4; // weak
@@ -189,15 +268,6 @@
extern int uTextureID_ar_up_up; // weak
-extern int uTextureID_507698; // weak
-extern int uTextureID_50769C; // weak
-extern int uTextureID_5076A0; // weak
-extern int uTextureID_5076A4; // weak
-extern int uTextureID_5076A8; // weak
-extern int uTextureID_5076AC; // weak
-extern int uTextureID_5076B0; // weak
-extern int uTextureID_5076B4; // weak
-extern int uTextureID_Parchment; // weak
extern unsigned int uTextureID_mhp_yel;
extern unsigned int uTextureID_mhp_red;
extern unsigned int uTextureID_mhp_grn;
@@ -257,17 +327,8 @@
extern unsigned int uTextureID_BarBlue;
-extern unsigned int uTextureID_right_panel; // weak
-
-
-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
+extern Texture *right_panel;
+extern Texture *right_panel_loop;
extern struct Texture *pTexture_Leather;
@@ -318,9 +379,6 @@
extern struct Texture pTex_F7CE30;
-
-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 cf29f444ddd7 -r d87bfbd3bb3b Engine/LOD.cpp
--- a/Engine/LOD.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/LOD.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -42,6 +42,15 @@
int _6A0CA8_lod_unused; // weak
+inline int LODFile_IconsBitmaps::LoadDummyTexture()
+{
+ for (unsigned int i = 0; i < uNumLoadedFiles; ++i)
+ if (!strcmp(pTextures[i].pName, "pending"))
+ return i;
+ return LoadTextureFromLOD(&pTextures[uNumLoadedFiles], "pending", TEXTURE_16BIT_PALETTE);
+}
+
+
// inlined
//----- (mm6c::00408860) --------------------------------------------------
void LODFile_IconsBitmaps::_inlined_sub2()
@@ -1144,7 +1153,7 @@
this->dword_11B84 = 0;
this->dword_11B80 = 0;
this->uNumLoadedFiles = 0;
- this->dword_011BA4 = 0;
+ this->_011BA4_debug_paletted_pixels_uncompressed = false;
//this->can_load_hardware_sprites = 0;
this->pHardwareSurfaces = 0;
this->pHardwareTextures = 0;
@@ -1809,20 +1818,20 @@
fread(pDst, 1, 0x30u, File);
strcpy(pDst->pName, pContainer);
- pDst->pLevelOfDetail0_prolly_alpha_mask = 0;
+ pDst->paletted_pixels = 0;
if ( pDst->uDecompressedSize )
{
- pDst->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(pDst->uDecompressedSize);
+ pDst->paletted_pixels = (unsigned __int8 *)malloc(pDst->uDecompressedSize);
v9 = malloc(pDst->uTextureSize);
fread((void *)v9, 1, (size_t)pDst->uTextureSize, File);
- zlib::MemUnzip(pDst->pLevelOfDetail0_prolly_alpha_mask, &pDst->uDecompressedSize, v9, pDst->uTextureSize);
+ zlib::MemUnzip(pDst->paletted_pixels, &pDst->uDecompressedSize, v9, pDst->uTextureSize);
pDst->uTextureSize = pDst->uDecompressedSize;
free(v9);
}
else
{
- pDst->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(0);
- fread(pDst->pLevelOfDetail0_prolly_alpha_mask, 1, (size_t)pDst->uTextureSize, File);
+ pDst->paletted_pixels = (unsigned __int8 *)malloc(0);
+ fread(pDst->paletted_pixels, 1, (size_t)pDst->uTextureSize, File);
}
pDst->pPalette16 = 0;
pDst->pPalette24 = 0;
@@ -1849,7 +1858,7 @@
if ( pDst->pBits & 2 )
{
- v15 = (int)&pDst->pLevelOfDetail0_prolly_alpha_mask[pDst->uSizeOfMaxLevelOfDetail];
+ v15 = (int)&pDst->paletted_pixels[pDst->uSizeOfMaxLevelOfDetail];
pDst->pLevelOfDetail1 = (unsigned __int8 *)v15;
v16 = (pDst->uSizeOfMaxLevelOfDetail >> 2) + v15;
//pDst->pLevelOfDetail2 = (unsigned __int8 *)v16;
@@ -2061,7 +2070,7 @@
File = FindContainer(pContainer, 0);
v6 = pDst;
- if ( File && pDst->pLevelOfDetail0_prolly_alpha_mask
+ if ( File && pDst->paletted_pixels
&& mode == 2
&& pDst->pPalette16 && !pDst->pPalette24
&& (v7 = pDst->uTextureSize,
@@ -2070,9 +2079,9 @@
v8 = pDst->uTextureSize,
(signed int)v8 <= (signed int)v7) )
{
- if ( !pDst->uDecompressedSize || this->dword_011BA4 )
+ if ( !pDst->uDecompressedSize || this->_011BA4_debug_paletted_pixels_uncompressed)
{
- fread(pDst->pLevelOfDetail0_prolly_alpha_mask, 1, pDst->uTextureSize, File);
+ fread(pDst->paletted_pixels, 1, pDst->uTextureSize, File);
}
else
{
@@ -2082,7 +2091,7 @@
zlib::MemUnzip(Sourcea, &v6->uDecompressedSize, DstBufa, v6->uTextureSize);
v6->uTextureSize = pDst->uDecompressedSize;
free(DstBufa);
- memcpy(v6->pLevelOfDetail0_prolly_alpha_mask, Sourcea, pDst->uDecompressedSize);
+ memcpy(v6->paletted_pixels, Sourcea, pDst->uDecompressedSize);
free(Sourcea);
}
for( uint i = 0; i < 256; ++i )
@@ -2159,10 +2168,10 @@
}
return result;
}
- if ( !v8->uDecompressedSize || dword_011BA4 )
+ if ( !v8->uDecompressedSize || _011BA4_debug_paletted_pixels_uncompressed)
{
- v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(v8->uTextureSize);
- fread(v8->pLevelOfDetail0_prolly_alpha_mask, 1, (size_t)v8->uTextureSize, pFile);
+ v8->paletted_pixels = (unsigned __int8 *)malloc(v8->uTextureSize);
+ fread(v8->paletted_pixels, 1, (size_t)v8->uTextureSize, pFile);
}
else
{
@@ -2179,8 +2188,8 @@
+ ((signed int)v8->uSizeOfMaxLevelOfDetail >> 6));
v22 = (size_t)pOutTex;
v23 = &pContainer[v8->uTextureWidth * v8->uTextureHeight];
- v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc((unsigned int)pOutTex);
- memcpy(v8->pLevelOfDetail0_prolly_alpha_mask, v23, v22);
+ v8->paletted_pixels = (unsigned __int8 *)malloc((unsigned int)pOutTex);
+ memcpy(v8->paletted_pixels, v23, v22);
v8->uTextureWidth = (signed __int16)v8->uTextureWidth / 2;
v8->uTextureHeight = (signed __int16)v8->uTextureHeight / 2;
--v8->uWidthLn2;
@@ -2192,8 +2201,8 @@
}
else
{
- v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(v8->uDecompressedSize);
- memcpy(v8->pLevelOfDetail0_prolly_alpha_mask, pContainer, v8->uDecompressedSize);
+ v8->paletted_pixels = (unsigned __int8 *)malloc(v8->uDecompressedSize);
+ memcpy(v8->paletted_pixels, pContainer, v8->uDecompressedSize);
}
free((void *)pContainer);
}
@@ -2230,7 +2239,7 @@
if ( v8->pBits & 2 )
{
- v8->pLevelOfDetail1 = &v8->pLevelOfDetail0_prolly_alpha_mask[v8->uSizeOfMaxLevelOfDetail];
+ v8->pLevelOfDetail1 = &v8->paletted_pixels[v8->uSizeOfMaxLevelOfDetail];
//v8->pLevelOfDetail2 = &v8->pLevelOfDetail1[v8->uSizeOfMaxLevelOfDetail >> 2];
//v8->pLevelOfDetail3 = &v8->pLevelOfDetail2[v8->uSizeOfMaxLevelOfDetail >> 4];
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/LOD.h
--- a/Engine/LOD.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/LOD.h Sat Mar 05 01:51:54 2016 +0200
@@ -168,13 +168,7 @@
void _inlined_sub1();
void _inlined_sub2();
- inline int LoadDummyTexture()
- {
- for (unsigned int i = 0; i < uNumLoadedFiles; ++i)
- if (!strcmp(pTextures[i].pName, "pending"))
- return i;
- return LoadTextureFromLOD(&pTextures[uNumLoadedFiles], "pending", TEXTURE_16BIT_PALETTE);
- }
+ int LoadDummyTexture();
Texture *GetTexture(int idx);
@@ -204,7 +198,7 @@
int uNumPrevLoadedFiles;
int uTexturePacksCount;
int pFacesLock;
- int dword_011BA4;
+ int _011BA4_debug_paletted_pixels_uncompressed;
//int can_load_hardware_sprites;
struct IDirectDrawSurface **pHardwareSurfaces;
struct IDirect3DTexture2 **pHardwareTextures;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/MMT.cpp
--- a/Engine/MMT.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/MMT.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -121,7 +121,7 @@
tex->uTextureSize = png_get_rowbytes(png_ptr, info_ptr);
tex->uDecompressedSize = png_get_rowbytes(png_ptr, info_ptr);
tex->pPalette16 = (unsigned __int16 *) malloc(sizeof(unsigned __int16) * width * height);
- tex->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *) malloc(sizeof(unsigned __int8) * width * height);
+ tex->paletted_pixels = (unsigned __int8 *) malloc(sizeof(unsigned __int8) * width * height);
for (y=0; ypPalette16[i] = Color16(ptr[0], ptr[1], ptr[2]);
- tex->pLevelOfDetail0_prolly_alpha_mask[i] = ptr[3];
+ tex->paletted_pixels[i] = ptr[3];
i++;
}
}
@@ -150,7 +150,7 @@
void MMT_MainMenu_Loop()
{
- GUIButton *pButton; // eax@27
+ /*GUIButton *pButton; // eax@27
unsigned int pControlParam; // ecx@35
unsigned int pX;
unsigned int pY; // [sp-18h] [bp-54h]@39
@@ -279,14 +279,13 @@
pRenderer->Present();
//remove resource
- main_menu_background.Release();
if ( pGUIWindow2 )
{
pGUIWindow2->Release();
pGUIWindow2 = 0;
}
pWindow_MMT_MainMenu->Release();
- pIcons_LOD->RemoveTexturesPackFromTextureList();
+ pIcons_LOD->RemoveTexturesPackFromTextureList();*/
}
void MMT_MenuMessageProc()
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/SaveLoad.cpp
--- a/Engine/SaveLoad.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/SaveLoad.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -34,7 +34,8 @@
struct SavegameList *pSavegameList = new SavegameList;
unsigned int uNumSavegameFiles;
std::array pSavegameUsedSlots;
-std::array pSavegameThumbnails;
+//std::array pSavegameThumbnails;
+std::array pSavegameThumbnails;
std::array pSavegameHeader;
@@ -231,7 +232,10 @@
dword_6BE364_game_settings_1 |= GAME_SETTINGS_2000 | GAME_SETTINGS_0001;
for (uint i = 0; i < uNumSavegameFiles; ++i)
- pSavegameThumbnails[i].Release();
+ {
+ pSavegameThumbnails[i]->Release();
+ pSavegameThumbnails[i] = nullptr;
+ }
pIcons_LOD->RemoveTexturesPackFromTextureList();
if ( use_music_folder )
@@ -586,7 +590,10 @@
//v3 = pSavegameThumbnails;
viewparams->bRedrawGameUI = true;
for (uint i = 0; i < 45; i++)
- pSavegameThumbnails[i].Release();
+ {
+ pSavegameThumbnails[i]->Release();
+ pSavegameThumbnails[i] = nullptr;
+ }
if ( _stricmp(pCurrentMapName, "d05.blv") )
pNew_LOD->_4621A7();
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/SaveLoad.h
--- a/Engine/SaveLoad.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/SaveLoad.h Sat Mar 05 01:51:54 2016 +0200
@@ -52,5 +52,5 @@
extern unsigned int uNumSavegameFiles;
extern std::array pSavegameUsedSlots;
-extern struct SavegameList *pSavegameList;
+extern struct SavegameList *pSavegameList;
extern std::array pSavegameHeader;
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/mm7_7.cpp
--- a/Engine/mm7_7.cpp Mon Oct 05 00:19:13 2015 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-#define _CRTDBG_MAP_ALLOC
-#include
-#include
-
-#define _CRT_SECURE_NO_WARNINGS
-
-/*
-GUIProgressBar *__cdecl crt_construct_576E30()
-{
- RGBTexture::RGBTexture(&pGameLoadingUI_ProgressBar.pLoadingBg);
- RGBTexture::RGBTexture(&pGameLoadingUI_ProgressBar.field_40);
- RGBTexture::RGBTexture(&pGameLoadingUI_ProgressBar.field_68);
- RGBTexture::RGBTexture(&pGameLoadingUI_ProgressBar.field_90);
- RGBTexture::RGBTexture(&pGameLoadingUI_ProgressBar.field_B8);
- Texture::Texture(&pGameLoadingUI_ProgressBar.field_E0);
- Texture::Texture(&pGameLoadingUI_ProgressBar.pBardata);
- Texture::Texture(&pGameLoadingUI_ProgressBar.pLoadingProgress);
- pGameLoadingUI_ProgressBar.uProgressCurrent = 0;
- pGameLoadingUI_ProgressBar.uProgressMax = 0;
- pGameLoadingUI_ProgressBar.field_9 = 0;
- pGameLoadingUI_ProgressBar.field_8 = 0;
- pGameLoadingUI_ProgressBar.uHeight = 0;
- pGameLoadingUI_ProgressBar.uWidth = 0;
- pGameLoadingUI_ProgressBar.uY = 0;
- pGameLoadingUI_ProgressBar.uX = 0;
- pGameLoadingUI_ProgressBar.field_17 = 0;
- pGameLoadingUI_ProgressBar.field_16 = 0;
- pGameLoadingUI_ProgressBar.field_15 = 0;
- pGameLoadingUI_ProgressBar.field_14 = 0;
- pGameLoadingUI_ProgressBar.field_13 = 0;
- pGameLoadingUI_ProgressBar.field_12 = 0;
- pGameLoadingUI_ProgressBar.field_11 = 0;
- pGameLoadingUI_ProgressBar.field_10 = 0;
- return &pGameLoadingUI_ProgressBar;
-}
-*/
-
-/*void constructors()
-{
- //no call to these anywhere
- uGameUIFontMain_initialize();
- uGameUIFontShadow_initialize();
-}*/
-
-/*
-
-X = called already in our code
-byte = constructor byte setter
-
-.data:004DF004 dd offset sub_4C9A95
-IOStream
-
-.data:004DF008 dd offset sub_4C9B06
-IOStream
-
-.data:004DF00C dd offset sub_401022
-achieved by zero initializing dword_4F8580, dword_4F8580[0] = 1; is unused anyway
-
-.data:004DF010 dd offset sub_408B98
-.data:004DF014 dd offset sub_409BCC
-.data:004DF018 dd offset crt_sub_40D6EB
-byte
-
-.data:004DF01C dd offset crt_construct_40D707_ptr_pArcomageGame
-X
-
-.data:004DF020 dd offset crt_sub_40E4A6
-.data:004DF024 dd offset crt_deconstruct_40E503
-.data:004DF028 dd offset crt_sub_40F760
-.data:004DF02C dd offset crt_sub_40F7EA
-.data:004DF030 dd offset crt_sub_40F9A9
-.data:004DF034 dd offset crt_sub_410AD9
-byte
-
-.data:004DF038 dd offset SetMoonPhaseNames
-X
-
-.data:004DF03C dd offset crt_sub_413FD0
-byte
-
-.data:004DF040 dd offset j_SetMonthNames
-.data:004DF044 dd offset j_SetDayNames
-.data:004DF048 dd offset j_SetSpellSchoolNames
-.data:004DF04C dd offset j_SetAttributeNames
-X InitializeGameText
-
-.data:004DF050 dd offset uGameUIFontMain_initialize
-.data:004DF054 dd offset uGameUIFontShadow_initialize
-X called in SetUserInterface(Neutral)
-
-.data:004DF058 dd offset crt_construct_507ABC
-.data:004DF05C dd offset crt_construct_507A94
-.data:004DF060 dd offset crt_construct_507A6C
-.data:004DF064 dd offset crt_construct_507A44
-.data:004DF068 dd offset crt_construct_507A1C
-.data:004DF06C dd offset crt_construct_506F20
-.data:004DF070 dd offset crt_construct_414D90_ptr_506E40
-X (RGBTexture constructor)
-
-.data:004DF074 dd offset crt_sub_423903
-byte
-
-.data:004DF078 dd offset IndoorCamera__IndoorCamera
-X
-
-.data:004DF07C dd offset crt_sub_423ACD
-byte
-
-.data:004DF080 dd offset j_reset_some_strus_flt_2Cs
-deleted
-
-.data:004DF084 dd offset j_sub_423B4A
-byte
-
-.data:004DF088 dd offset crt_sub_4262DD
-byte
-
-.data:004DF08C dd offset crt_construct_pEventTimer
-.data:004DF090 dd offset crt_construct_pMiscTimer
-X
-
-.data:004DF094 dd offset crt_sub_42640D
-.data:004DF098 dd offset crt_sub_4268C7
-.data:004DF09C dd offset crt_sub_42692B
-byte
-
-.data:004DF0A0 dd offset sub_426947
-X initialized
-
-.data:004DF0A4 dd offset crt_construct_50C0C8
-X CastSpellInfo
-
-.data:004DF0A8 dd offset crt_sub_42FBB7
-byte
-
-.data:004DF0AC dd offset crt_construct_50CDB4
-seems unused CastSpellInfo variable
-
-.data:004DF0B0 dd offset sub_4361D3
-.data:004DF0B4 dd offset sub_4382A0
-.data:004DF0B8 dd offset sub_43850A
-.data:004DF0BC dd offset crt_438AEF
-.data:004DF0C0 dd offset crt_438B7F
-.data:004DF0C4 dd offset ctr_deconstruct_43B4E0
-byte
-
-.data:004DF0C8 dd offset crt_43B4FC
-deleted, constructor for stru_51076C
-
-.data:004DF0CC dd offset crt_deconstruct_43B51C
-.data:004DF0D0 dd offset crt_deconstruct_43B5F0
-.data:004DF0D4 dd offset crt_deconstruct_43B64C
-byte
-
-.data:004DF0D8 dd offset _crt_construct_stru165
-X BloodsplatContainer
-
-.data:004DF0DC dd offset crt_deconstruct_43B751
-.data:004DF0E0 dd offset crt_deconstruct_43B9E3
-.data:004DF0E4 dd offset crt_deconstruct_43BC8B
-.data:004DF0E8 dd offset crt_deconstruct_43F22A
-byte
-
-.data:004DF0EC dd offset crt_construct_51B778
-X BspRenderer
-
-.data:004DF0F0 dd offset crt_construct_519AB8
-X LightsStack_MobileLight
-
-.data:004DF0F4 dd offset crt_construct_5187F0
-X LightsStack_StationaryLight
-
-
-.data:004DF0F8 dd offset crt_deconstruct_440B28
-.data:004DF0FC dd offset crt_deconstruct_440F5C
-byte
-
-.data:004DF100 dd offset crt_construct_576E30
-added but have to RECHECK
-
-.data:004DF104 dd offset crt_deconstruct_4437E5
-byte
-
-.data:004DF108 dd offset sub_446219
-X InitializeGameText
-
-.data:004DF10C dd offset crt_construct_5773C4
-unused RGBTexture
-
-.data:004DF110 dd offset sub_44C346
-.data:004DF114 dd offset crt_deconstruct_44C42C
-.data:004DF118 dd offset crt_deconstruct_44D49E
-byte
-
-.data:004DF11C dd offset _inline_SpriteFrameTable__SpriteFrameTable_global
-.data:004DF120 dd offset _inline_TextureFrameTable__TextureFrameTable_global
-X
-
-.data:004DF124 dd offset sub_44E49B
-.data:004DF128 dd offset sub_44F1F9
-.data:004DF12C dd offset sub_44F560
-.data:004DF130 dd offset sub_450DC2
-.data:004DF134 dd offset crt_deconstruct_45232B
-byte
-
-.data:004DF138 dd offset crt_construct_stru193_math@5C6E00
-X
-
-.data:004DF13C dd offset crt_452B74
-byte
-
-.data:004DF140 dd offset j_SetSomeItemsNames
-added
-
-.data:004DF144 dd offset crt_deconstruct_458364
-byte
-
-.data:004DF148 dd offset _intline_DecorationList__DecorationList_global
-X
-
-.data:004DF14C dd offset j_crt_construct_6836D0
-X LevelDecorations
-
-.data:004DF150 dd offset _inline_ObjectList__ObjectList_global
-X
-
-.data:004DF154 dd offset j_crt_construct_665230
-X SpriteObjects
-
-.data:004DF158 dd offset j_crt_construct_5FF158
-X Actors
-
-.data:004DF15C dd offset _inline_MonsterList__MonsterList_global
-X
-
-.data:004DF160 dd offset _inline_ChestList__ChestList_global
-X
-
-.data:004DF164 dd offset j_crt_construct_5E5150
-X Chests
-
-.data:004DF168 dd offset _inline_OverlayList__OverlayList_global
-X
-
-.data:004DF16C dd offset crt_construct_5E4D58
-X OverlayList
-
-.data:004DF170 dd offset sub_459C05
-byte
-
-.data:004DF174 dd offset sub_459C21
-X KeyboardActionMapping
-
-.data:004DF178 dd offset crt_deconstruct_45AFBD
-.data:004DF17C dd offset crt_deconstruct_45B0EE
-.data:004DF180 dd offset sub_45BA89
-byte
-
-.data:004DF184 dd offset crt_call_global_ctor_45BAA5
-stru_69BD44 = "effpar03" , need RECHECK
-
-.data:004DF188 dd offset crt_deconstruct_45DEF7
-.data:004DF18C dd offset crt_deconstruct_45DF53
-.data:004DF190 dd offset crt_deconstruct_45DF6F
-.data:004DF194 dd offset crt_deconstruct_45DF8B
-byte
-
-.data:004DF198 dd offset crt_construct_ptr_6A0A60
-X LODFile
-
-.data:004DF19C dd offset crt_construct_ptr_6A0820
-X LODFile
-
-.data:004DF1A0 dd offset j_crt_construct_ptr_6A0118
-X RGBTexture
-
-.data:004DF1A4 dd offset sub_461415
-.data:004DF1A8 dd offset crt_deconstruct_4621BE
-.data:004DF1AC dd offset crt_deconstruct_46220E
-byte
-
-.data:004DF1B0 dd offset crt_construct_ptr_702B28
-X Allocator
-
-.data:004DF1B4 dd offset sub_46224A
-X unused
-
-.data:004DF1B8 dd offset crt_construct_ptr_06F0E80
-X LODFile_IconsBitmaps
-
-.data:004DF1BC dd offset sub_4623CF
-X LODFile_Sprites
-
-.data:004DF1C0 dd offset crt_call_ctors__pIcons_LOD
-.data:004DF1C4 dd offset crt_call_ctors__pEvents_LOD
-.data:004DF1C8 dd offset _inline_IndoorLocation__IndoorLocation_global
-X
-
-.data:004DF1CC dd offset crt_init_globals_462620
-X initialized
-
-.data:004DF1D0 dd offset crt_construct_ptr_6BE158
-unused stru289
-
-.data:004DF1D4 dd offset j_crt_init_globals_462659
-X initialized
-
-.data:004DF1D8 dd offset crt_construct_ptr_06BE070
-X ODMRenderParams
-
-.data:004DF1DC dd offset crt_init_globals_46269B
-unused SW variable
-
-.data:004DF1E0 dd offset crt_construct_ptr_6BE048
-X TileTable
-
-.data:004DF1E4 dd offset crt_construct_ptr_6A0DF0
-X OutdoorLocation
-
-.data:004DF1E8 dd offset sub_466CA6
-.data:004DF1EC dd offset crt_deconstruct_467D29
-.data:004DF1F0 dd offset sub_467E32
-.data:004DF1F4 dd offset crt_deconstruct_46AC2C
-byte
-
-.data:004DF1F8 dd offset crt_construct_46AC48_ptr_720990
-X std__string_720990 = "micon1" , need RECHECK
-
-.data:004DF1FC dd offset crt_deconstruct_46BD83
-byte
-
-.data:004DF200 dd offset crt_init_globals_46BD9F
-added
-
-.data:004DF204 dd offset nullsub_26
-X
-
-.data:004DF208 dd offset sub_476102
-byte
-
-.data:004DF20C dd offset sub_47611E
-X Texture
-
-.data:004DF210 dd offset sub_476128
-dword_7241C8 = 1 RECHECK
-
-.data:004DF214 dd offset sub_476133
-X InitializeGameText
-
-.data:004DF218 dd offset sub_477595
-.data:004DF21C dd offset sub_47836D
-.data:004DF220 dd offset crt_sub_4783D9
-byte
-
-.data:004DF224 dd offset j__sub_4783FA_construct_global_73D150
-
-
-.data:004DF228 dd offset sub_47A368
-.data:004DF22C dd offset sub_47C778
-.data:004DF230 dd offset sub_47CDBE
-byte
-
-.data:004DF234 dd offset sub_47CDDA
-
-
-.data:004DF238 dd offset sub_47F483
-byte
-
-.data:004DF23C dd offset sub_47F49F
-
-
-.data:004DF240 dd offset sub_47F4B9
-
-
-.data:004DF244 dd offset sub_482A74
-.data:004DF248 dd offset sub_485F37
-.data:004DF24C dd offset sub_486A0C
-.data:004DF250 dd offset crt_deconstruct_487DF7
-.data:004DF254 dd offset sub_488E07
-.data:004DF258 dd offset sub_489572
-.data:004DF25C dd offset crt_deconstruct_489B44
-.data:004DF260 dd offset crt_deconstruct_489BBA
-byte
-
-.data:004DF264 dd offset crt_construct_489BD6_ptr_080D198
-X PaletteManager
-
-.data:004DF268 dd offset sub_48AAA9
-.data:004DF26C dd offset sub_48C20E
-byte
-
-.data:004DF270 dd offset sub_48C22A
-.data:004DF274 dd offset loc_48C234
-.data:004DF278 dd offset loc_48C243
-.data:004DF27C dd offset loc_48C252
-.data:004DF280 dd offset loc_48C3C0
-.data:004DF284 dd offset loc_48C474
-Party constructor
-
-.data:004DF288 dd offset sub_49801C
-.data:004DF28C dd offset sub_498077
-.data:004DF290 dd offset sub_498A25
-.data:004DF294 dd offset sub_49AFE5
-.data:004DF298 dd offset crt_deconstruct_49B36B
-byte
-
-.data:004DF29C dd offset crt_construct_stru187@AE5BA8
-X DecalBuilder
-
-.data:004DF2A0 dd offset crt_construct_ptr_AE5B94
-std__string_AE5B94 = "hwsplat04", need RECHECK
-
-.data:004DF2A4 dd offset sub_49C594
-.data:004DF2A8 dd offset sub_49D6C8
-.data:004DF2AC dd offset sub_49D6E4
-.data:004DF2B0 dd offset sub_49E71A
-byte
-
-.data:004DF2B4 dd offset sub_49E736
-X Render
-
-.data:004DF2B8 dd offset sub_4A198F
-byte
-
-.data:004DF2BC dd offset sub_4A19AB
-added
-
-.data:004DF2C0 dd offset sub_4A51AF
-.data:004DF2C4 dd offset sub_4A7047
-.data:004DF2C8 dd offset sub_4A94EB
-.data:004DF2CC dd offset sub_4A963E
-byte
-
-.data:004DF2D0 dd offset sub_4A965A
-X pSoundList
-
-.data:004DF2D4 dd offset AudioPlayer__AudioPlayer
-X
-
-.data:004DF2D8 dd offset sub_4AC1AD
-.data:004DF2DC dd offset sub_4AC662
-.data:004DF2E0 dd offset sub_4ACC1C
-.data:004DF2E4 dd offset sub_4AD369
-.data:004DF2E8 dd offset crt_deconstruct_4AD44B
-byte
-
-.data:004DF2EC dd offset crt_construct_4AD467_ptr_F79D68
-X OSVersion
-
-.data:004DF2F0 dd offset crt_deconstruct_4AD4DE
-byte
-
-.data:004DF2F4 dd offset crt_construct_ptr_F7CE30
-X Texture
-
-.data:004DF2F8 dd offset sub_4B142B
-.data:004DF2FC dd offset crt_sub_4BE344
-byte
-
-.data:004DF300 dd offset j_Random__ctor
-X
-
-.data:004DF304 dd offset crt_sub_4BE6B5
-.data:004DF308 dd offset crt_sub_4BE6D4
-byte
-
-.data:004DF30C dd offset crt_j_VideoPlayer__ctor
-RECHECK
-
-.data:004DF310 dd offset sub_4C021E
-byte
-
-.data:004DF314 dd offset sub_4C023A
-added
-
-.data:004DF318 dd offset sub_4C035A
-.data:004DF31C dd offset sub_4C03A3
-byte
-
-.data:004DF320 dd offset sub_4C03BF
-.data:004DF324 dd offset sub_4C03F1
-.data:004DF328 dd offset sub_4C0423
-.data:004DF32C dd offset sub_4C044B
-.data:004DF330 dd offset sub_4C047D
-X vis filters
-
-.data:004DF334 dd offset sub_4C2A6E
-.data:004DF338 dd offset sub_4C2A8A
-.data:004DF33C dd offset sub_4C2F7C
-byte
-
-*/
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/mm7_data.cpp
--- a/Engine/mm7_data.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/mm7_data.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -782,11 +782,6 @@
int uTextureID_PlayerBuff_Preservation; // weak
int uTextureID_PlayerBuff_Bless; // weak
int uTextureID_Btn_QuickReference; // weak
-int uTextureID_Compas; // dword_5079B4
-int dword_5079C8; // weak
-int dword_5079CC; // weak
-int dword_5079D0; // weak
-int uTextureID_Minimap_Loop; // dword_5079D8
struct GUIButton *pBtn_ZoomOut; // idb
struct GUIButton *pBtn_ZoomIn; // idb
unsigned int uGameUIFontShadow;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Engine/mm7_data.h
--- a/Engine/mm7_data.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/mm7_data.h Sat Mar 05 01:51:54 2016 +0200
@@ -445,11 +445,6 @@
extern int uTextureID_PlayerBuff_Preservation; // weak
extern int uTextureID_PlayerBuff_Bless; // weak
extern int uTextureID_Btn_QuickReference; // weak
-extern int uTextureID_Compas; // dword_5079B4
-extern int dword_5079C8; // weak
-extern int dword_5079CC; // weak
-extern int dword_5079D0; // weak
-extern int uTextureID_Minimap_Loop; // dword_5079D8
extern struct GUIButton *pBtn_ZoomOut; // idb
extern struct GUIButton *pBtn_ZoomIn; // idb
extern unsigned int uGameUIFontShadow;
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/GUIProgressBar.cpp
--- a/GUI/GUIProgressBar.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/GUIProgressBar.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -4,6 +4,7 @@
#define _CRT_SECURE_NO_WARNINGS
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "GUIProgressBar.h"
#include "Engine/LOD.h"
@@ -45,7 +46,7 @@
}
//v2 = this;
- if (pLoadingBg.pPixels)
+ if (loading_bg)
return false;
uType = type;
@@ -72,7 +73,12 @@
while ( field_10[v7] == 1 );
}
sprintf(Str1, "loading%d.pcx", v7);
- pLoadingBg.Load(Str1, 2);
+
+ wchar_t image_name[1024];
+ swprintf(image_name, L"loading%d.pcx", v7);
+
+ loading_bg = assets->GetImage_PCXFromIconsLOD(image_name);
+ //pLoadingBg.Load(Str1, 2);
uProgressCurrent = 0;
uX = 122;
uY = 151;
@@ -120,7 +126,12 @@
{
int v3; // edi@7
- pLoadingBg.Release();
+ if (loading_bg)
+ {
+ loading_bg->Release();
+ loading_bg = nullptr;
+ }
+
if ( this->uType == 1 )
{
if ( this->uProgressCurrent != this->uProgressMax )
@@ -128,19 +139,19 @@
this->uProgressCurrent = this->uProgressMax - 1;
Progress();
}
- v3 = (int)&this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask;
- free(this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask);
+ v3 = (int)&this->pLoadingProgress.paletted_pixels;
+ free(this->pLoadingProgress.paletted_pixels);
free(this->pLoadingProgress.pPalette16);
this->pLoadingProgress.pPalette16 = 0;
}
else
{
- if ( !this->pBardata.pLevelOfDetail0_prolly_alpha_mask )
+ if ( !this->pBardata.paletted_pixels)
return;
- free(this->pBardata.pLevelOfDetail0_prolly_alpha_mask);
+ free(this->pBardata.paletted_pixels);
v3 = (int)&this->pBardata.pPalette16;
free(this->pBardata.pPalette16);
- this->pBardata.pLevelOfDetail0_prolly_alpha_mask = 0;
+ this->pBardata.paletted_pixels = 0;
}
*(int *)v3 = 0;
}
@@ -151,7 +162,7 @@
pRenderer->BeginScene();
if (uType != TYPE_Fullscreen)
{
- if (pBardata.pLevelOfDetail0_prolly_alpha_mask)
+ if (pBardata.paletted_pixels)
{
pRenderer->Sub01();
@@ -169,17 +180,20 @@
return;
}
- if (!pLoadingBg.pPixels)
+ //if (!pLoadingBg.pPixels)
+ if (!loading_bg)
{
- pRenderer->EndScene();
- return;
+ pRenderer->EndScene();
}
+ else
+ {
- pRenderer->DrawTextureRGB(0, 0, &pLoadingBg);
- //pRenderer->SetRasterClipRect(0, 0, 639, 479);
- pRenderer->SetUIClipRect(172, 459, 15 * (signed int)(signed __int64)((double)(300 * uProgressCurrent) / (double)uProgressMax) / 15 + 172, 471);
- pRenderer->DrawTextureIndexedAlpha(172, 459, &pLoadingProgress);
- pRenderer->ResetUIClipRect();
- pRenderer->EndScene();
- pRenderer->Present();
+ pRenderer->DrawTextureNew(0, 0, loading_bg);
+ //pRenderer->SetRasterClipRect(0, 0, 639, 479);
+ pRenderer->SetUIClipRect(172, 459, 15 * (signed int)(signed __int64)((double)(300 * uProgressCurrent) / (double)uProgressMax) / 15 + 172, 471);
+ pRenderer->DrawTextureIndexedAlpha(172, 459, &pLoadingProgress);
+ pRenderer->ResetUIClipRect();
+ pRenderer->EndScene();
+ pRenderer->Present();
+ }
}
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/GUIProgressBar.h
--- a/GUI/GUIProgressBar.h Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/GUIProgressBar.h Sat Mar 05 01:51:54 2016 +0200
@@ -36,14 +36,21 @@
//char field_15;
//char field_16;
//char field_17;
- RGBTexture pLoadingBg;
- RGBTexture field_40;
- RGBTexture field_68;
- RGBTexture field_90;
- RGBTexture field_B8;
+ //RGBTexture pLoadingBg; // 18
+ //RGBTexture field_40;
+ //RGBTexture field_68;
+ //RGBTexture field_90;
+ //RGBTexture field_B8;
struct Texture field_E0;
struct Texture pBardata;
struct Texture pLoadingProgress;
+
+
+ inline GUIProgressBar():
+ loading_bg(nullptr)
+ {}
+
+ struct Image *loading_bg;
};
#pragma pack(pop)
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/GUIWindow.cpp
--- a/GUI/GUIWindow.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/GUIWindow.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -25,8 +25,11 @@
#include "Engine/Graphics/Outdoor.h"
#include "Engine/Tables/IconFrameTable.h"
#include "Engine/Objects/Actor.h"
+#include "Engine/AssetsManager.h"
#include "GUI\UI\UIArena.h"
+#include "GUI/UI/UIPopup.h"
+#include "GUI/UI/UIGame.h"
#include "Engine/Events.h"
#include "Engine/Graphics/Level\Decoration.h"
@@ -494,56 +497,55 @@
//----- (00415551) --------------------------------------------------------
-void GUIWindow::DrawMessageBox(int arg0)
+void GUIWindow::DrawMessageBox(bool inside_game_viewport)
{
- unsigned int v2; // edi@1
- signed int v4; // esi@2
- unsigned int v5; // eax@2
unsigned int v16; // esi@19
GUIWindow current_window; // [sp+Ch] [bp-60h]@18
POINT cursor; // [sp+60h] [bp-Ch]@8
unsigned int v22; // [sp+74h] [bp+8h]@2
- v2 = 0;
- if ( arg0 )
+ int x = 0;
+ int y = 0;
+ int z, w;
+ if (inside_game_viewport)
{
- v4 = pViewport->uViewportTL_X;
- v5 = pViewport->uViewportBR_X;
- v2 = pViewport->uViewportTL_Y;
- v22 = pViewport->uViewportBR_Y;
+ x = pViewport->uViewportTL_X;
+ z = pViewport->uViewportBR_X;
+ y = pViewport->uViewportTL_Y;
+ w = pViewport->uViewportBR_Y;
}
else
{
- v4 = 0;
- v5 = window->GetWidth();
- v22 = window->GetHeight();
+ z = window->GetWidth();
+ w = window->GetHeight();
}
+
pMouse->GetCursorPos(&cursor);
- if ( (signed int)this->uFrameX >= v4 )
+ if ( (signed int)this->uFrameX >= x )
{
- if ( (signed int)(this->uFrameWidth + this->uFrameX) > (signed int)v5 )
+ if ( (signed int)(this->uFrameWidth + this->uFrameX) > z )
{
- this->uFrameX = v5 - this->uFrameWidth;
+ this->uFrameX = z - this->uFrameWidth;
this->uFrameY = cursor.y + 30;
}
}
else
{
- this->uFrameX = v4;
+ this->uFrameX = x;
this->uFrameY = cursor.y + 30;
}
- if ( (signed int)this->uFrameY >= (signed int)v2 )
+ if ( (signed int)this->uFrameY >= y )
{
- if ( (signed int)(this->uFrameY + this->uFrameHeight) > (signed int)v22 )
+ if ( (signed int)(this->uFrameY + this->uFrameHeight) > w)
this->uFrameY = cursor.y - this->uFrameHeight - 30;
}
else
this->uFrameY = cursor.y + 30;
- if ( (signed int)this->uFrameY < (signed int)v2 )
- this->uFrameY = v2;
- if ( (signed int)this->uFrameX < v4 )
- this->uFrameX = v4;
+ if ( (signed int)this->uFrameY < y )
+ this->uFrameY = y;
+ if ( (signed int)this->uFrameX < x )
+ this->uFrameX = x;
this->uFrameZ = this->uFrameWidth + this->uFrameX - 1;
this->uFrameW = this->uFrameHeight + this->uFrameY - 1;
memcpy(¤t_window, this, sizeof(current_window));
@@ -567,19 +569,32 @@
}
//----- (00411B59) --------------------------------------------------------
-void __fastcall LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer)
+void LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer)
{
//unsigned int v2; // esi@1
//unsigned int v3; // edi@1
FILE *v4; // ebx@1
FILE *v5; // eax@2
- char pContainerName[64]; // [sp+Ch] [bp-44h]@1
+ //char pContainerName[64]; // [sp+Ch] [bp-44h]@1
//unsigned int v7; // [sp+4Ch] [bp-4h]@1
- //v2 = uSlot;
- //v7 = uPlayer;
- //v3 = uSlot + 1;
- sprintf(pContainerName, "data\\lloyd%d%d.pcx", uPlayer, uSlot + 1);
+ if (pSavegameThumbnails[uSlot])
+ {
+ pSavegameThumbnails[uSlot]->Release();
+ pSavegameThumbnails[uSlot] = nullptr;
+ }
+
+
+ wchar_t filename[1024];
+ swprintf(filename, L"data\\lloyd%d%d.pcx", uPlayer, uSlot + 1);
+ pSavegameThumbnails[uSlot] = assets->GetImage_PCXFromFile(filename);
+
+ if (!pSavegameThumbnails[uSlot])
+ {
+ swprintf(filename, L"lloyd%d%d.pcx", uPlayer, uSlot + 1);
+ pSavegameThumbnails[uSlot] = assets->GetImage_PCXFromNewLOD(filename);
+ }
+ /*sprintf(pContainerName, "data\\lloyd%d%d.pcx", uPlayer, uSlot + 1);
v4 = fopen(pContainerName, "rb");
if ( v4 )
{
@@ -594,7 +609,7 @@
pSavegameThumbnails[uSlot].LoadFromFILE(v5, 0, 0);
else
*((int *)&pSavegameThumbnails.data()->pPixels + 10 * uSlot) = 0;
- }
+ }*/
}
@@ -624,7 +639,7 @@
pWhiteColor = Color16(0xFFu, 0xFFu, 0xFFu);
pColor2 = Color16(0x15u, 0x99u, 0xE9u);
pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background);
- pRenderer->DrawTextureIndexedAlpha(0x1D4u, 0, &pIcons_LOD->pTextures[uTextureID_right_panel_loop]);
+ pRenderer->DrawTextureIndexedAlpha(0x1D4u, 0, right_panel_loop);
if ( pDialogueNPCCount != uNumDialogueNPCPortraits || !uHouse_ExitPic )
{
pDialogWindow.uFrameWidth = 130;
@@ -891,7 +906,7 @@
Stra = strtok(0, "\n");
}
}
-// 5C6DB4: using guessed type int ui_current_text_color;
+
//----- (0044CE08) --------------------------------------------------------
void GUIWindow::DrawText(GUIFont *font, signed int uX, int uY, unsigned short uFontColor, const char *Str, bool present_time_transparency, int max_text_height, signed int uFontShadowColor )
@@ -1197,6 +1212,19 @@
return pButton;
}
+
+void GUIWindow::InitializeGUI()
+{
+ SetUserInterface(PartyAlignment_Neutral, false);
+
+ for (uint i = 0; i < 20; ++i)
+ pWindowList[i] = nullptr;
+ uNumVisibleWindows = -1;
+ memset(pVisibleWindowsIdxs.data(), 0, sizeof(pVisibleWindowsIdxs));
+
+ MainMenuUI_LoadFontsAndSomeStuff();
+}
+
//----- (00459C2B) --------------------------------------------------------
void GUIWindow::DrawFlashingInputCursor( signed int uX, int uY, struct GUIFont *a2 )
{
@@ -1537,7 +1565,7 @@
pWindow = pWindowList[pVisibleWindowsIdxs[i] - 1];
pWindow->Update();
- switch (pWindow->eWindowType)
+ /*switch (pWindow->eWindowType)
{
case WINDOW_50:
{
@@ -1614,7 +1642,7 @@
default:
__debugbreak();
continue;
- }
+ }*/
}
if ( GetCurrentMenuID() == -1 )
GameUI_DrawFoodAndGold();
@@ -1622,34 +1650,6 @@
UI_OnMouseRightClick(0);
}
-//----- (00415485) --------------------------------------------------------
-void DrawMM7CopyrightWindow()
-{
- GUIWindow Dst; // [sp+8h] [bp-54h]@1
-
- memset(&Dst, 0, sizeof(Dst));
- Dst.uFrameWidth = 624;
- Dst.uFrameHeight = 256;
- Dst.uFrameX = 8;
- Dst.uFrameY = 30; // c 1999 The 3DO Company.
- Dst.uFrameHeight = pFontSmallnum->CalcTextHeight(pGlobalTXT_LocalizationStrings[157], &Dst, 24, 0)
- + 2 * LOBYTE(pFontSmallnum->uFontHeight)
- + 24;
- Dst.uFrameY = 470 - Dst.uFrameHeight;
- Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
- Dst.uFrameW = 469;
- //Dst.Hint = "abcagfdsgsg ljsrengvlkjesnfkjwnef";
- Dst.DrawMessageBox(0);
-
- Dst.uFrameWidth -= 24;
- Dst.uFrameX += 12;
- Dst.uFrameY += 12;
- Dst.uFrameHeight -= 12;
- Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
- Dst.uFrameW = Dst.uFrameY + Dst.uFrameHeight - 1;
- Dst.DrawTitleText(pFontSmallnum, 0, 0xCu, ui_mainmenu_copyright_color, pGlobalTXT_LocalizationStrings[157], 3);
-}
-
//----- (00467FB6) --------------------------------------------------------
void CreateScrollWindow()
@@ -1713,21 +1713,27 @@
extern void set_default_ui_skin();
set_default_ui_skin();
+
+ if (!parchment)
+ parchment = assets->GetImage_16BitColorKey(L"parchment", 0x7FF);
+
if (align == PartyAlignment_Evil)
{
if ( bReplace )
{
- pTexture_RightFrame->Reload("ib-r-C.pcx");
- pTexture_BottomFrame->Reload("ib-b-C.pcx");
- pTexture_TopFrame->Reload("ib-t-C.pcx");
- pTexture_LeftFrame->Reload("ib-l-C.pcx");
- pTexture_StatusBar->Reload("IB-Foot-c.pcx");
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_right_panel], "ib-mb-C", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Minimap_Loop], "ib-autmask-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Compas], "IB-COMP-C", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-c", 2);
+ game_ui_rightframe = assets->GetImage_PCXFromIconsLOD(L"ib-r-C.pcx");
+ game_ui_bottomframe = assets->GetImage_PCXFromIconsLOD(L"ib-b-C.pcx");
+ game_ui_topframe = assets->GetImage_PCXFromIconsLOD(L"ib-t-C.pcx");
+ game_ui_leftframe = assets->GetImage_PCXFromIconsLOD(L"ib-l-C.pcx");
+ game_ui_statusbar = assets->GetImage_PCXFromIconsLOD(L"IB-Foot-c.pcx");
+
+ right_panel = assets->GetTexture("ib-mb-C");
+ minimap_loop = assets->GetTexture("ib-autmask-c");
+ _5079B4_compass = assets->GetTexture("IB-COMP-C");
+ _5079D0_init_g = assets->GetTexture("IB-InitG-c");
+ _5079C8_init_y = assets->GetTexture("IB-InitY-c");
+ _5079CC_init_r = assets->GetTexture("IB-InitR-c");
+
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-C", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-C", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-C", 2);
@@ -1751,30 +1757,31 @@
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uExitCancelTextureId], "ib-bcu-c", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50795C], "evtnpc-c", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_CharacterUI_InventoryBackground], "fr_inven-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Parchment], "parchment", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B4], "cornr_ll-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B0], "cornr_lr-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076AC], "cornr_ul-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A8], "cornr_ur-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A4], "edge_btm-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A0], "edge_lf-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50769C], "edge_rt-c", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507698], "edge_top-c", 2);
+ messagebox_corner_y = assets->GetImage_16BitAlpha(L"cornr_ll-c");
+ messagebox_corner_w = assets->GetImage_16BitAlpha(L"cornr_lr-c");
+ messagebox_corner_x = assets->GetImage_16BitAlpha(L"cornr_ul-c");
+ messagebox_corner_z = assets->GetImage_16BitAlpha(L"cornr_ur-c");
+ messagebox_border_bottom = assets->GetImage_16BitAlpha(L"edge_btm-c");
+ messagebox_border_left = assets->GetImage_16BitAlpha(L"edge_lf-c");
+ messagebox_border_right = assets->GetImage_16BitAlpha(L"edge_rt-c");
+ messagebox_border_top = assets->GetImage_16BitAlpha(L"edge_top-c");
pIcons_LOD->ReloadTexture(pTexture_591428, "endcap-c", 2);
}
else
{
- pTexture_RightFrame->Load("ib-r-C.pcx", 0);
- pTexture_BottomFrame->Load("ib-b-c.pcx", 0);
- pTexture_TopFrame->Load("ib-t-C.pcx", 0);
- pTexture_LeftFrame->Load("ib-l-C.pcx", 0);
- pTexture_StatusBar->Load("IB-Foot-c.pcx", 0);
- uTextureID_right_panel = pIcons_LOD->LoadTexture("ib-mb-C", TEXTURE_16BIT_PALETTE);
- uTextureID_Minimap_Loop = pIcons_LOD->LoadTexture("ib-autmask-c", TEXTURE_16BIT_PALETTE);
- uTextureID_Compas = pIcons_LOD->LoadTexture("IB-COMP-C", TEXTURE_16BIT_PALETTE);
- dword_5079D0 = pIcons_LOD->LoadTexture("IB-InitG-c", TEXTURE_16BIT_PALETTE);
- dword_5079C8 = pIcons_LOD->LoadTexture("IB-InitY-c", TEXTURE_16BIT_PALETTE);
- dword_5079CC = pIcons_LOD->LoadTexture("IB-InitR-c", TEXTURE_16BIT_PALETTE);
+ game_ui_rightframe = assets->GetImage_PCXFromIconsLOD(L"ib-r-C.pcx");
+ game_ui_bottomframe = assets->GetImage_PCXFromIconsLOD(L"ib-b-c.pcx");
+ game_ui_topframe = assets->GetImage_PCXFromIconsLOD(L"ib-t-C.pcx");
+ game_ui_leftframe = assets->GetImage_PCXFromIconsLOD(L"ib-l-C.pcx");
+ game_ui_statusbar = assets->GetImage_PCXFromIconsLOD(L"IB-Foot-c.pcx");
+
+ right_panel = assets->GetTexture("ib-mb-C");
+ minimap_loop = assets->GetTexture("ib-autmask-c");
+ _5079B4_compass = assets->GetTexture("IB-COMP-C");
+ _5079D0_init_g = assets->GetTexture("IB-InitG-c");
+ _5079C8_init_y = assets->GetTexture("IB-InitY-c");
+ _5079CC_init_r = assets->GetTexture("IB-InitR-c");
+
uTextureID_Btn_NPCLeft = pIcons_LOD->LoadTexture("IB-NPCLD-C", TEXTURE_16BIT_PALETTE);
uTextureID_Btn_NPCRight = pIcons_LOD->LoadTexture("IB-NPCRD-C", TEXTURE_16BIT_PALETTE);
uTextureID_Btn_ZoomIn = pIcons_LOD->LoadTexture("ib-autout-C", TEXTURE_16BIT_PALETTE);
@@ -1803,17 +1810,19 @@
{
if ( bReplace )
{
- pTexture_RightFrame->Reload("ib-r-a.pcx");
- pTexture_BottomFrame->Reload("ib-b-a.pcx");
- pTexture_TopFrame->Reload("ib-t-a.pcx");
- pTexture_LeftFrame->Reload("ib-l-a.pcx");
- pTexture_StatusBar->Reload("IB-Foot-a.pcx");
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_right_panel], "ib-mb-a", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Minimap_Loop], "ib-autmask-a", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Compas], "IB-COMP-a", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-a", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-a", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-a", 2);
+ game_ui_rightframe = assets->GetImage_PCXFromIconsLOD(L"ib-r-a.pcx");
+ game_ui_bottomframe = assets->GetImage_PCXFromIconsLOD(L"ib-b-a.pcx");
+ game_ui_topframe = assets->GetImage_PCXFromIconsLOD(L"ib-t-a.pcx");
+ game_ui_leftframe = assets->GetImage_PCXFromIconsLOD(L"ib-l-a.pcx");
+ game_ui_statusbar = assets->GetImage_PCXFromIconsLOD(L"IB-Foot-a.pcx");
+
+ right_panel = assets->GetTexture("ib-mb-a");
+ minimap_loop = assets->GetTexture("ib-autmask-a");
+ _5079B4_compass = assets->GetTexture("IB-COMP-a");
+ _5079D0_init_g = assets->GetTexture("IB-InitG-a");
+ _5079C8_init_y = assets->GetTexture("IB-InitY-a");
+ _5079CC_init_r = assets->GetTexture("IB-InitR-a");
+
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-a", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-a", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-a", 2);
@@ -1834,30 +1843,31 @@
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uExitCancelTextureId], "ib-bcu-a", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50795C], "evtnpc", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_CharacterUI_InventoryBackground], "fr_inven", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Parchment], "parchment", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B4], "cornr_ll", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B0], "cornr_lr", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076AC], "cornr_ul", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A8], "cornr_ur", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A4], "edge_btm", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A0], "edge_lf", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50769C], "edge_rt", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507698], "edge_top", 2);
+ messagebox_corner_y = assets->GetImage_16BitAlpha(L"cornr_ll");
+ messagebox_corner_w = assets->GetImage_16BitAlpha(L"cornr_lr");
+ messagebox_corner_x = assets->GetImage_16BitAlpha(L"cornr_ul");
+ messagebox_corner_z = assets->GetImage_16BitAlpha(L"cornr_ur");
+ messagebox_border_bottom = assets->GetImage_16BitAlpha(L"edge_btm");
+ messagebox_border_left = assets->GetImage_16BitAlpha(L"edge_lf");
+ messagebox_border_right = assets->GetImage_16BitAlpha(L"edge_rt");
+ messagebox_border_top = assets->GetImage_16BitAlpha(L"edge_top");
pIcons_LOD->ReloadTexture(pTexture_591428, "endcap", 2);
}
else
{
- pTexture_RightFrame->Load("ib-r-A.pcx", 0);
- pTexture_BottomFrame->Load("ib-b-A.pcx", 0);
- pTexture_TopFrame->Load("ib-t-A.pcx", 0);
- pTexture_LeftFrame->Load("ib-l-A.pcx", 0);
- pTexture_StatusBar->Load("IB-Foot-a.pcx", 0);
- uTextureID_right_panel = pIcons_LOD->LoadTexture("ib-mb-A", TEXTURE_16BIT_PALETTE);
- uTextureID_Minimap_Loop = pIcons_LOD->LoadTexture("ib-autmask-a", TEXTURE_16BIT_PALETTE);
- uTextureID_Compas = pIcons_LOD->LoadTexture("IB-COMP-A", TEXTURE_16BIT_PALETTE);
- dword_5079D0 = pIcons_LOD->LoadTexture("IB-InitG-a", TEXTURE_16BIT_PALETTE);
- dword_5079C8 = pIcons_LOD->LoadTexture("IB-InitY-a", TEXTURE_16BIT_PALETTE);
- dword_5079CC = pIcons_LOD->LoadTexture("IB-InitR-a", TEXTURE_16BIT_PALETTE);
+ game_ui_rightframe = assets->GetImage_PCXFromIconsLOD(L"ib-r-A.pcx");
+ game_ui_bottomframe = assets->GetImage_PCXFromIconsLOD(L"ib-b-A.pcx");
+ game_ui_topframe = assets->GetImage_PCXFromIconsLOD(L"ib-t-A.pcx");
+ game_ui_leftframe = assets->GetImage_PCXFromIconsLOD(L"ib-l-A.pcx");
+ game_ui_statusbar = assets->GetImage_PCXFromIconsLOD(L"IB-Foot-a.pcx");
+
+ right_panel = assets->GetTexture("ib-mb-A");
+ minimap_loop = assets->GetTexture("ib-autmask-a");
+ _5079B4_compass = assets->GetTexture("IB-COMP-A");
+ _5079D0_init_g = assets->GetTexture("IB-InitG-a");
+ _5079C8_init_y = assets->GetTexture("IB-InitY-a");
+ _5079CC_init_r = assets->GetTexture("IB-InitR-a");
+
uTextureID_Btn_NPCLeft = pIcons_LOD->LoadTexture("IB-NPCLD-A", TEXTURE_16BIT_PALETTE);
uTextureID_Btn_NPCRight = pIcons_LOD->LoadTexture("IB-NPCRD-A", TEXTURE_16BIT_PALETTE);
uTextureID_GameUI_CharSelectionFrame = pIcons_LOD->LoadTexture("IB-selec-A", TEXTURE_16BIT_PALETTE);
@@ -1878,15 +1888,14 @@
pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnim_WizardEye->uIconID);
pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchA");
pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnum_Torchlight->uIconID);
- uTextureID_Parchment = pIcons_LOD->LoadTexture("parchment", TEXTURE_16BIT_PALETTE);
- uTextureID_5076B4 = pIcons_LOD->LoadTexture("cornr_ll", TEXTURE_16BIT_PALETTE);
- uTextureID_5076B0 = pIcons_LOD->LoadTexture("cornr_lr", TEXTURE_16BIT_PALETTE);
- uTextureID_5076AC = pIcons_LOD->LoadTexture("cornr_ul", TEXTURE_16BIT_PALETTE);
- uTextureID_5076A8 = pIcons_LOD->LoadTexture("cornr_ur", TEXTURE_16BIT_PALETTE);
- uTextureID_5076A4 = pIcons_LOD->LoadTexture("edge_btm", TEXTURE_16BIT_PALETTE);
- uTextureID_5076A0 = pIcons_LOD->LoadTexture("edge_lf", TEXTURE_16BIT_PALETTE);
- uTextureID_50769C = pIcons_LOD->LoadTexture("edge_rt", TEXTURE_16BIT_PALETTE);
- uTextureID_507698 = pIcons_LOD->LoadTexture("edge_top", TEXTURE_16BIT_PALETTE);
+ messagebox_corner_y = assets->GetImage_16BitAlpha(L"cornr_ll");
+ messagebox_corner_w = assets->GetImage_16BitAlpha(L"cornr_lr");
+ messagebox_corner_x = assets->GetImage_16BitAlpha(L"cornr_ul");
+ messagebox_corner_z = assets->GetImage_16BitAlpha(L"cornr_ur");
+ messagebox_border_bottom = assets->GetImage_16BitAlpha(L"edge_btm");
+ messagebox_border_left = assets->GetImage_16BitAlpha(L"edge_lf");
+ messagebox_border_right = assets->GetImage_16BitAlpha(L"edge_rt");
+ messagebox_border_top = assets->GetImage_16BitAlpha(L"edge_top");
pTexture_591428 = pIcons_LOD->LoadTexturePtr("endcap", TEXTURE_16BIT_PALETTE);
}
uGameUIFontMain = Color16(0xAu, 0, 0);
@@ -1896,17 +1905,19 @@
{
if ( bReplace )
{
- pTexture_RightFrame->Reload("ib-r-B.pcx");
- pTexture_BottomFrame->Reload("ib-b-B.pcx");
- pTexture_TopFrame->Reload("ib-t-B.pcx");
- pTexture_LeftFrame->Reload("ib-l-B.pcx");
- pTexture_StatusBar->Reload("IB-Foot-b.pcx");
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_right_panel], "ib-mb-B", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Minimap_Loop], "ib-autmask-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Compas], "IB-COMP-B", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-b", 2);
+ game_ui_rightframe = assets->GetImage_PCXFromIconsLOD(L"ib-r-B.pcx");
+ game_ui_bottomframe = assets->GetImage_PCXFromIconsLOD(L"ib-b-B.pcx");
+ game_ui_topframe = assets->GetImage_PCXFromIconsLOD(L"ib-t-B.pcx");
+ game_ui_leftframe = assets->GetImage_PCXFromIconsLOD(L"ib-l-B.pcx");
+ game_ui_statusbar = assets->GetImage_PCXFromIconsLOD(L"IB-Foot-b.pcx");
+
+ right_panel = assets->GetTexture("ib-mb-B");
+ minimap_loop = assets->GetTexture("ib-autmask-b");
+ _5079B4_compass = assets->GetTexture("IB-COMP-B");
+ _5079D0_init_g = assets->GetTexture("IB-InitG-b");
+ _5079C8_init_y = assets->GetTexture("IB-InitY-b");
+ _5079CC_init_r = assets->GetTexture("IB-InitR-b");
+
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-B", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-B", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-B", 2);
@@ -1927,15 +1938,14 @@
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uExitCancelTextureId], "ib-bcu-b", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50795C], "evtnpc-b", 2);
pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_CharacterUI_InventoryBackground], "fr_inven-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Parchment], "parchment", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B4], "cornr_ll-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076B0], "cornr_lr-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076AC], "cornr_ul-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A8], "cornr_ur-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A4], "edge_btm-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_5076A0], "edge_lf-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50769C], "edge_rt-b", 2);
- pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507698], "edge_top-b", 2);
+ messagebox_corner_y = assets->GetImage_16BitAlpha(L"cornr_ll-b");
+ messagebox_corner_w = assets->GetImage_16BitAlpha(L"cornr_lr-b");
+ messagebox_corner_x = assets->GetImage_16BitAlpha(L"cornr_ul-b");
+ messagebox_corner_z = assets->GetImage_16BitAlpha(L"cornr_ur-b");
+ messagebox_border_bottom = assets->GetImage_16BitAlpha(L"edge_btm-b");
+ messagebox_border_left = assets->GetImage_16BitAlpha(L"edge_lf-b");
+ messagebox_border_right = assets->GetImage_16BitAlpha(L"edge_rt-b");
+ messagebox_border_top = assets->GetImage_16BitAlpha(L"edge_top-b");
pIcons_LOD->ReloadTexture(pTexture_591428, "endcap-b", 2);
}
uGameUIFontMain = Color16(0, 0, 0xC8u);
@@ -2072,10 +2082,10 @@
// int v6; // ecx@6
// int v9; // [sp+18h] [bp-4h]@1
- if (pIcons_LOD->dword_011BA4 && a2->uDecompressedSize)
+ if (pIcons_LOD->_011BA4_debug_paletted_pixels_uncompressed && a2->uDecompressedSize)
v4 = a2->UnzipPalette();
else
- v4 = a2->pLevelOfDetail0_prolly_alpha_mask;
+ v4 = a2->paletted_pixels;
//v5 = pZBuffer;
for (uint i = 0; i < a2->uTextureHeight; i++)
{
@@ -2086,7 +2096,7 @@
}
pZBuffer += window->GetWidth() - a2->uTextureWidth;
}
- if (pIcons_LOD->dword_011BA4)
+ if (pIcons_LOD->_011BA4_debug_paletted_pixels_uncompressed)
{
if (a2->uDecompressedSize)
free(v4);
@@ -2114,10 +2124,10 @@
// int v11; // [sp+18h] [bp-8h]@1
//void *v12; // [sp+1Ch] [bp-4h]@5
- if (pIcons_LOD->dword_011BA4 && pTex->uDecompressedSize)
+ if (pIcons_LOD->_011BA4_debug_paletted_pixels_uncompressed && pTex->uDecompressedSize)
v3 = pTex->UnzipPalette();
else
- v3 = pTex->pLevelOfDetail0_prolly_alpha_mask;
+ v3 = pTex->paletted_pixels;
//v12 = v3;
//v4 = v3;
//v5 = pZBuffer;
@@ -2134,7 +2144,7 @@
}
pZBuffer += window->GetWidth() - pTex->uTextureWidth;
}
- if (pIcons_LOD->dword_011BA4)
+ if (pIcons_LOD->_011BA4_debug_paletted_pixels_uncompressed)
{
if (pTex->uDecompressedSize)
free(v3);
@@ -2730,7 +2740,7 @@
//----- (004B46A5) --------------------------------------------------------
void __fastcall DrawTextAtStatusBar(const char *Str, int a5)
{
- pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar);
+ pRenderer->DrawTextureNew(0, 352/480.0f, game_ui_statusbar);
pPrimaryWindow->DrawText(pFontLucida, pFontLucida->AlignText_Center(450, Str) + 11, 357, a5, Str, 0, 0, 0);
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/GUIWindow.h
--- a/GUI/GUIWindow.h Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/GUIWindow.h Sat Mar 05 01:51:54 2016 +0200
@@ -289,8 +289,8 @@
WINDOW_Scroll = 0x1E,
WINDOW_CastSpell_InInventory = 31,
WINDOW_ModalWindow = 70,
- WINDOW_50 = 80,
- WINDOW_59 = 89,
+ WINDOW_50 = 80, // Debug
+ WINDOW_59 = 89, // Debug: Item Generation Window
WINDOW_PressedButton2 = 90,
WINDOW_CharactersPressedButton = 91,
WINDOW_PressedButton = 92,
@@ -342,7 +342,7 @@
void DrawTitleText(GUIFont *a2, signed int uHorizontalMargin, unsigned int uVerticalMargin, unsigned __int16 uDefaultColor, const char *pInString, unsigned int uLineSpacing);
void DrawShops_next_generation_time_string(__int64 next_generation_time);
void HouseDialogManager();
- void DrawMessageBox(int arg0);
+ void DrawMessageBox(bool inside_game_viewport);
GUIButton *GetControl(unsigned int uID);
void _41D08F_set_keyboard_control_group(int num_buttons, int a3, int a4, int a5);
void _41D73D_draw_buff_tooltip();
@@ -350,6 +350,8 @@
virtual void Update() {}
virtual void Release();
+ static void InitializeGUI();
+
unsigned int uFrameX;
unsigned int uFrameY;
unsigned int uFrameWidth;
@@ -671,7 +673,7 @@
void UI_OnMouseRightClick(Vec2_int_ *_this);
-void __fastcall DrawPopupWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight); // idb
+void DrawPopupWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight); // idb
void DrawMM7CopyrightWindow();
//void LoadFonts_and_DrawCopyrightWindow();
void GUI_UpdateWindows();
@@ -680,7 +682,7 @@
void CreateAwardsScrollBar();
void ReleaseAwardsScrollBar();
void Inventory_ItemPopupAndAlchemy();
-void __fastcall LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer);
+void LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer);
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
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/Books/LloydsBook.cpp
--- a/GUI/UI/Books/LloydsBook.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/Books/LloydsBook.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -132,7 +132,7 @@
if (pPlayer->pInstalledBeacons[BeaconID].SaveFileID != 0)
{
pRenderer->DrawTextureIndexedAlpha(pLloydsBeacons_SomeXs[BeaconID], pLloydsBeacons_SomeYs[BeaconID], pTexture_CurrentBook);
- pRenderer->DrawTextureRGB(pLloydsBeaconsPreviewXs[BeaconID], pLloydsBeaconsPreviewYs[BeaconID], &pSavegameThumbnails[BeaconID]);
+ pRenderer->DrawTextureNew(pLloydsBeaconsPreviewXs[BeaconID]/640.0f, pLloydsBeaconsPreviewYs[BeaconID]/480.0f, pSavegameThumbnails[BeaconID]);
Str = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(pPlayer->pInstalledBeacons[BeaconID].SaveFileID)].pName;
pTextHeight = pSpellFont->CalcTextHeight(Str, &pWindow, 0, 0);
pWindow.uFrameY += -6 - pTextHeight;
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/Books/MapBook.cpp
--- a/GUI/UI/Books/MapBook.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/Books/MapBook.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -242,7 +242,7 @@
screenWidth = br_x - tl_x + 1;
screenHeight = br_y - tl_y + 1;
//render16_data = &pRenderer->pTargetSurface[tl_x + tl_y * pRenderer->uTargetSurfacePitch];
- texture8_data = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask;
+ texture8_data = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].paletted_pixels;
pPalette_16 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16;
scale_increment = (1 << (pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2 + 16)) / viewparams->uMapBookMapZoom;
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/Spellbook.cpp
--- a/GUI/UI/Spellbook.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/Spellbook.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -168,7 +168,7 @@
pTexture = SBPageCSpellsTextureList[i];
else
pTexture = SBPageSSpellsTextureList[i];
- if (pTexture->pLevelOfDetail0_prolly_alpha_mask)
+ if (pTexture->paletted_pixels)
{
pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Xpos;
pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Ypos;
@@ -188,7 +188,7 @@
v10 = pRenderer->pActiveZBuffer[a2.x + pSRZBufferLineOffsets[a2.y]] & 0xFFFF;
if (v10)
{
- if (SBPageCSpellsTextureList[v10]->pLevelOfDetail0_prolly_alpha_mask)
+ if (SBPageCSpellsTextureList[v10]->paletted_pixels)
{
pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Xpos;
pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Ypos;
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UICharacter.cpp
--- a/GUI/UI/UICharacter.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UICharacter.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1608,7 +1608,7 @@
}
if ( !bRingsShownInCharScreen )//рисование лупы
pRenderer->DrawTextureIndexedAlpha(603, 299, pIcons_LOD->GetTexture(uTextureID_MAGNIF_B));
- pRenderer->DrawTextureIndexedAlpha(468, 0, pIcons_LOD->GetTexture(uTextureID_right_panel_loop));//обрамление
+ pRenderer->DrawTextureIndexedAlpha(468, 0, right_panel_loop);//обрамление
}
//----- (0041A2D1) --------------------------------------------------------
@@ -1723,7 +1723,7 @@
{
CharacterUI_DrawPaperdoll(player);
pRenderer->DrawTextureIndexedAlpha(0x1D9u, 0, pIcons_LOD->GetTexture(uTextureID_BACKHAND));
- pRenderer->DrawTextureIndexedAlpha(0x1D4u, 0, pIcons_LOD->GetTexture(uTextureID_right_panel_loop));
+ pRenderer->DrawTextureIndexedAlpha(0x1D4u, 0, right_panel_loop);
pRenderer->DrawTextureIndexed(pCharacterScreen_DetalizBtn->uX, pCharacterScreen_DetalizBtn->uY,
pIcons_LOD->GetTexture(uTextureID_detaliz_close_button));
for (uint i = 0; i < 6; ++i)
@@ -1755,7 +1755,7 @@
uTextureID_MAGNIF_B = pIcons_LOD->LoadTexture("MAGNIF-B", TEXTURE_16BIT_PALETTE);
//if ( !pParty->uAlignment || pParty->uAlignment == 1 || pParty->uAlignment == 2 )
uTextureID_BACKDOLL = pIcons_LOD->LoadTexture("BACKDOLL", TEXTURE_16BIT_PALETTE);
- uTextureID_right_panel_loop = uTextureID_right_panel;
+ right_panel_loop = right_panel;
uTextureID_BACKHAND = pIcons_LOD->LoadTexture("BACKHAND", TEXTURE_16BIT_PALETTE);
uTextureID_detaliz_close_button = uExitCancelTextureId;
for ( uint i = 0; i < 4; ++i )
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIGame.h
--- a/GUI/UI/UIGame.h Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIGame.h Sat Mar 05 01:51:54 2016 +0200
@@ -44,4 +44,13 @@
virtual ~GUIWindow_GameVideoOptions() {}
virtual void Update();
-};
\ No newline at end of file
+};
+
+
+
+
+extern class Image *game_ui_statusbar;
+extern class Image *game_ui_rightframe;
+extern class Image *game_ui_topframe;
+extern class Image *game_ui_leftframe;
+extern class Image *game_ui_bottomframe;
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIHouses.cpp
--- a/GUI/UI/UIHouses.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIHouses.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -887,10 +887,10 @@
v17 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
pDialogueNPCCount = 0;
pTexture_Dialogue_Background = &pIcons_LOD->pTextures[v17];
- uTextureID_right_panel_loop = uTextureID_right_panel;
+ right_panel_loop = right_panel;
PrepareHouse(uHouseID);
v18 = 1;
- uTextureID_right_panel_loop = uTextureID_right_panel;
+ right_panel_loop = right_panel;
if ( uNumDialogueNPCPortraits == 1 )
pDialogueNPCCount = 1;
pMediaPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIMainMenu.cpp
--- a/GUI/UI/UIMainMenu.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIMainMenu.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -4,6 +4,7 @@
#include
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/LOD.h"
#include "Engine/MMT.h"
#include "Engine/texts.h"
@@ -325,7 +326,6 @@
char *pString; // [sp+12Ch] [bp-10h]@9
GUIFont *pFontQuick; // [sp+134h] [bp-8h]@1
GUIFont *pFontCChar; // [sp+138h] [bp-4h]@1
- RGBTexture mm6title_texture; // [sp+54h] [bp-E8h]@1
RGBTexture cred_texture; // [sp+100h] [bp-3Ch]@1
Texture pTemporaryTexture; // [sp+Ch] [bp-130h]@5
@@ -344,7 +344,9 @@
PlayAudio(L"Music\\15.mp3");
else
pAudioPlayer->PlayMusicTrack(MUSIC_Credits);
- mm6title_texture.Load("mm6title.pcx", 0);
+
+ Image *mm6title = assets->GetImage_PCXFromIconsLOD(L"mm6title.pcx");
+
cred_texturet = (char *)pEvents_LOD->LoadRaw("credits.txt", 0);
pFile = pEvents_LOD->FindContainer("credits.txt", 0);
if ( !pFile )
@@ -402,7 +404,7 @@
else
{
pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &mm6title_texture);
+ pRenderer->DrawTextureNew(0, 0, mm6title);
pRenderer->SetUIClipRect(credit_window.uFrameX, credit_window.uFrameY, credit_window.uFrameX + credit_window.uFrameWidth,
credit_window.uFrameY + credit_window.uFrameHeight);
pRenderer->CreditsTextureScroll(credit_window.uFrameX, credit_window.uFrameY, 0, move_Y, &cred_texture);
@@ -425,7 +427,13 @@
free(pFontCChar);
pWindow_MainMenu->Release();
pIcons_LOD->RemoveTexturesPackFromTextureList();
- mm6title_texture.Release();
+
+ if (mm6title)
+ {
+ mm6title->Release();
+ mm6title = nullptr;
+ }
+
cred_texture.Release();
return MENU_MAIN; // return MENU_Main
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIPartyCreation.cpp
--- a/GUI/UI/UIPartyCreation.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIPartyCreation.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -4,6 +4,7 @@
#include
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/Party.h"
#include "Engine/LOD.h"
#include "Engine/Timer.h"
@@ -109,7 +110,7 @@
//move sky
pRenderer->BeginScene();
- pRenderer->DrawTextureNew(0, 0, &main_menu_background);
+ 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);
@@ -565,8 +566,13 @@
bool party_not_creation_flag; // [sp+74h] [bp-Ch]@1
party_not_creation_flag = false;
- main_menu_background.Release();
- main_menu_background.Load("makeme.pcx", 0);
+
+ if (main_menu_background)
+ {
+ main_menu_background->Release();
+ main_menu_background = nullptr;
+ }
+ main_menu_background = assets->GetImage_PCXFromIconsLOD(L"makeme.pcx");
pGUIWindow_CurrentMenu->receives_keyboard_input_2 = WINDOW_INPUT_NONE;
SetCurrentMenuID(MENU_CREATEPARTY);
@@ -607,7 +613,6 @@
}
}
}
- main_menu_background.Release();
pGUIWindow_CurrentMenu->Release();
pGUIWindow_CurrentMenu = nullptr;
@@ -731,6 +736,12 @@
}
}
+ if (main_menu_background)
+ {
+ main_menu_background->Release();
+ main_menu_background = nullptr;
+ }
+
pAudioPlayer->StopChannels(-1, -1);
return party_not_creation_flag;
}
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIPopup.cpp
--- a/GUI/UI/UIPopup.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIPopup.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -31,6 +31,16 @@
static char static_sub_417BB5_out_string[1200]; // static to a file, not sub actually
+struct Image *parchment = nullptr;
+struct Image *messagebox_corner_x = nullptr; // 5076AC
+struct Image *messagebox_corner_y = nullptr; // 5076B4
+struct Image *messagebox_corner_z = nullptr; // 5076A8
+struct Image *messagebox_corner_w = nullptr; // 5076B0
+struct Image *messagebox_border_top = nullptr; // 507698
+struct Image *messagebox_border_bottom = nullptr; // 5076A4
+struct Image *messagebox_border_left = nullptr; // 50769C
+struct Image *messagebox_border_right = nullptr; // 5076A0
+
//----- (004179BC) --------------------------------------------------------
void CharacterUI_DrawTooltip(const char *Title, const char *content)
{
@@ -59,55 +69,117 @@
}
//----- (004151D9) --------------------------------------------------------
-void __fastcall DrawPopupWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight)
+void DrawPopupWindow(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight)
{
unsigned int uNumTiles; // [sp+2Ch] [bp-Ch]@6
- unsigned int coord_x; // [sp+2Ch] [bp-Ch]@3
- unsigned int coord_y; // [sp+34h] [bp-4h]@5
+ int coord_x; // [sp+2Ch] [bp-Ch]@3
+ int coord_y; // [sp+34h] [bp-4h]@5
- auto parchment = pIcons_LOD->GetTexture(uTextureID_Parchment);
+ if (!parchment)
+ return;
- if ( parchment->uTextureWidth && parchment->uTextureHeight)
- {
+
pRenderer->SetUIClipRect(uX, uY, uX + uWidth, uY + uHeight);
- uNumTiles = uWidth / parchment->uTextureWidth;
- if ( uWidth % parchment->uTextureWidth )
+ unsigned int parchment_width = parchment->GetWidth();
+ unsigned int parchment_height = parchment->GetHeight();
+
+ uNumTiles = uWidth / parchment_width;
+ if ( uWidth % parchment_width)
++uNumTiles;
coord_y = uY;
- for ( uint j = 0; j <= uHeight / parchment->uTextureHeight; j++ )
+ for ( uint j = 0; j <= uHeight / parchment_height; j++ )
{
- coord_x = uX - parchment->uTextureWidth;
+ coord_x = uX - parchment_width;
for ( uint i = uNumTiles + 1; i; --i )
{
- coord_x += parchment->uTextureWidth;
- pRenderer->DrawTextureIndexed(coord_x, coord_y, parchment);
+ coord_x += parchment_width;
+ pRenderer->DrawTextureNew(coord_x / 640.0f, coord_y / 480.0f, parchment);
}
- coord_y += parchment->uTextureHeight;
+ coord_y += parchment_height;
}
- pRenderer->DrawTextureIndexedAlpha(uX, uY, pIcons_LOD->GetTexture(uTextureID_5076AC));
- pRenderer->DrawTextureIndexedAlpha(uX, uY + uHeight - 32, pIcons_LOD->GetTexture(uTextureID_5076B4));
- pRenderer->DrawTextureIndexedAlpha(uX + uWidth - 32, uY, pIcons_LOD->GetTexture(uTextureID_5076A8));
- pRenderer->DrawTextureIndexedAlpha(uX + uWidth - 32, uY + uHeight - 32, pIcons_LOD->GetTexture(uTextureID_5076B0));
- if ( uWidth > 64 )
+
+
+ pRenderer->DrawTextureAlphaNew(
+ uX / 640.0f,
+ uY / 480.0f,
+ messagebox_corner_x
+ );
+ pRenderer->DrawTextureAlphaNew(
+ uX / 640.0f,
+ (uY + uHeight - messagebox_corner_y->GetHeight()) / 480.0f,
+ messagebox_corner_y
+ );
+ pRenderer->DrawTextureAlphaNew(
+ (uX + uWidth - messagebox_corner_z->GetWidth()) / 640.0f,
+ uY / 480.0f,
+ messagebox_corner_z
+ );
+ pRenderer->DrawTextureAlphaNew(
+ (uX + uWidth - messagebox_corner_z->GetWidth()) / 640.0f,
+ (uY + uHeight - messagebox_corner_y->GetHeight()) / 480.0f,
+ messagebox_corner_w
+ );
+
+
+ if (uWidth > messagebox_corner_x->GetWidth() + messagebox_corner_z->GetWidth())
{
- pRenderer->SetUIClipRect(uX + 32, uY, uX + uWidth - 32, uY + uHeight);
- pRenderer->DrawTextureIndexedAlpha(uX + 32, uY, pIcons_LOD->GetTexture(uTextureID_507698));
- pRenderer->DrawTextureIndexedAlpha(uX + 32, uY + uHeight - 10, pIcons_LOD->GetTexture(uTextureID_5076A4));
- if ( uWidth > 512 )
+ pRenderer->SetUIClipRect(
+ uX + messagebox_corner_x->GetWidth(),
+ uY,
+ uX + uWidth - messagebox_corner_z->GetWidth(),
+ uY + uHeight
+ );
+
+ // horizontal borders
+ for (
+ unsigned int x = uX + messagebox_corner_x->GetWidth();
+ x < uX + uWidth - messagebox_corner_x->GetWidth();
+ x += messagebox_border_top->GetWidth()
+ )
{
- pRenderer->DrawTextureIndexedAlpha(uX + 544, uY, pIcons_LOD->GetTexture(uTextureID_507698));
- pRenderer->DrawTextureIndexedAlpha(uX + 544, uY + uHeight - 10, pIcons_LOD->GetTexture(uTextureID_5076A4));
+ pRenderer->DrawTextureAlphaNew(
+ x / 640.0f,
+ uY / 480.0f,
+ messagebox_border_top
+ );
+ pRenderer->DrawTextureAlphaNew(
+ x / 640.0f,
+ (uY + uHeight - messagebox_border_bottom->GetHeight()) / 480.0f,
+ messagebox_border_bottom
+ );
}
}
- if ( uHeight > 64 )
+
+ // vertical borders
+ if ( uHeight > messagebox_corner_x->GetHeight() + messagebox_corner_y->GetHeight())
{
- pRenderer->SetUIClipRect(uX, uY + 32, uX + uWidth, uY + uHeight - 32);
- pRenderer->DrawTextureIndexedAlpha(uX, uY + 32, pIcons_LOD->GetTexture(uTextureID_5076A0));
- pRenderer->DrawTextureIndexedAlpha(uX + uWidth - 10, uY + 32, pIcons_LOD->GetTexture(uTextureID_50769C));
+ pRenderer->SetUIClipRect(
+ uX,
+ uY + messagebox_corner_x->GetHeight(),
+ uX + uWidth,
+ uY + uHeight - messagebox_corner_y->GetHeight()
+ );
+
+ for (
+ unsigned int y = uY + messagebox_corner_x->GetHeight();
+ y < uY + uHeight - messagebox_corner_y->GetHeight();
+ y += messagebox_border_top->GetHeight()
+ )
+ {
+ pRenderer->DrawTextureAlphaNew(
+ uX / 640.0f,
+ y / 480.0f,
+ messagebox_border_left
+ );
+ pRenderer->DrawTextureAlphaNew(
+ (uX + uWidth - messagebox_border_right->GetWidth() - 1) / 640.0f,
+ y / 480.0f,
+ messagebox_border_right
+ );
+ }
}
pRenderer->ResetUIClipRect();
- }
}
//----- (0041D895) --------------------------------------------------------
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UIPopup.h
--- a/GUI/UI/UIPopup.h Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UIPopup.h Sat Mar 05 01:51:54 2016 +0200
@@ -2,3 +2,14 @@
unsigned int __fastcall GetSpellColor(signed int a1);
__int64 GetExperienceRequiredForLevel(int a1);
+
+
+extern struct Image *parchment;
+extern struct Image *messagebox_corner_x; // 5076AC
+extern struct Image *messagebox_corner_y; // 5076B4
+extern struct Image *messagebox_corner_z; // 5076A8
+extern struct Image *messagebox_corner_w; // 5076B0
+extern struct Image *messagebox_border_top; // 507698
+extern struct Image *messagebox_border_bottom; // 5076A4
+extern struct Image *messagebox_border_left; // 50769C
+extern struct Image *messagebox_border_right; // 5076A0
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UISaveLoad.cpp
--- a/GUI/UI/UISaveLoad.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UISaveLoad.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -76,7 +76,7 @@
fread(&pSavegameHeader[i], 100, 1, pLODFile.FindContainer("header.bin", 1));
if (pLODFile.FindContainer("image.pcx", 1))
{
- pSavegameThumbnails[i].LoadFromFILE(pLODFile.FindContainer("image.pcx", 1), 0, 1);
+ //pSavegameThumbnails[i].LoadFromFILE(pLODFile.FindContainer("image.pcx", 1), 0, 1);
pLODFile.CloseWriteFile();
pSavegameUsedSlots[i] = 1;
}
@@ -137,7 +137,7 @@
pIcons_LOD->_inlined_sub2();
memset(pSavegameUsedSlots.data(), 0, sizeof(pSavegameUsedSlots));
- memset(pSavegameThumbnails.data(), 0, 45 * sizeof(RGBTexture));
+ memset(pSavegameThumbnails.data(), 0, 45 * sizeof(Image *));
uTextureID_loadsave = pIcons_LOD->LoadTexture("loadsave", TEXTURE_16BIT_PALETTE);
uTextureID_load_up = pIcons_LOD->LoadTexture("load_up", TEXTURE_16BIT_PALETTE);
uTextureID_save_up = pIcons_LOD->LoadTexture("save_up", TEXTURE_16BIT_PALETTE);
@@ -160,7 +160,7 @@
pRenderer->DrawTextureIndexed(351, 302, pIcons_LOD->GetTexture(uTextureID_x_u));
}
else
- pRenderer->DrawTextureNew(0, 0, &main_menu_background);
+ pRenderer->DrawTextureNew(0, 0, main_menu_background);
/*pGUIWindow_CurrentMenu = new GUIWindow_Load(
@@ -210,7 +210,7 @@
}
else
{
- pSavegameThumbnails[i].LoadFromFILE(pLODFile.FindContainer("image.pcx", true), 0, true);
+ //pSavegameThumbnails[i].LoadFromFILE(pLODFile.FindContainer("image.pcx", true), 0, true);
pLODFile.CloseWriteFile();
pSavegameUsedSlots[i] = 1;
}
@@ -299,8 +299,8 @@
save_load_window.uFrameZ = save_load_window.uFrameX + 219;
save_load_window.uFrameHeight = pFontSmallnum->uFontHeight;
save_load_window.uFrameW = pFontSmallnum->uFontHeight + save_load_window.uFrameY - 1;
- if ( pSavegameThumbnails[uLoadGameUI_SelectedSlot].pPixels )
- pRenderer->DrawTextureRGB(pGUIWindow_CurrentMenu->uFrameX + 276, pGUIWindow_CurrentMenu->uFrameY + 171, &pSavegameThumbnails[uLoadGameUI_SelectedSlot]);
+ if ( pSavegameThumbnails[uLoadGameUI_SelectedSlot] )
+ pRenderer->DrawTextureNew((pGUIWindow_CurrentMenu->uFrameX + 276)/640.0f, (pGUIWindow_CurrentMenu->uFrameY + 171)/480.0f, pSavegameThumbnails[uLoadGameUI_SelectedSlot]);
//Draw map name
save_load_window.DrawTitleText(pFontSmallnum, 0, 0, 0, pMapStats->pInfos[pMapStats->GetMapInfo(pSavegameHeader[uLoadGameUI_SelectedSlot].pLocationName)].pName, 3);
//Draw date
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UITransition.cpp
--- a/GUI/UI/UITransition.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UITransition.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -216,7 +216,7 @@
memcpy(&travel_window, pPrimaryWindow, sizeof(travel_window));
pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, pDestinationMapName, 20);
pRenderer->DrawTextureIndexed(477, 0, pTexture_Dialogue_Background);
- pRenderer->DrawTextureIndexedAlpha(468, 0, &pIcons_LOD->pTextures[uTextureID_right_panel_loop]);
+ pRenderer->DrawTextureIndexedAlpha(468, 0, right_panel_loop);
pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside);
pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u));
pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u));
@@ -259,8 +259,8 @@
pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background);
pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, pIcons_LOD->GetTexture(uTextureID_50795C));
pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside);
- uTextureID_right_panel_loop = uTextureID_right_panel;
- pRenderer->DrawTextureIndexedAlpha(468, 0, pIcons_LOD->GetTexture(uTextureID_right_panel));
+ right_panel_loop = right_panel;
+ pRenderer->DrawTextureIndexedAlpha(468, 0, right_panel);
pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u));
pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u));
map_id = pMapStats->GetMapInfo(pCurrentMapName);
diff -r cf29f444ddd7 -r d87bfbd3bb3b GUI/UI/UiGame.cpp
--- a/GUI/UI/UiGame.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/GUI/UI/UiGame.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -30,6 +30,8 @@
#include "Engine/Objects/Chest.h"
#include "Engine/Graphics/Overlays.h"
+#include "Game/Game.h"
+
#include "IO/Mouse.h"
#include "IO/Keyboard.h"
@@ -44,6 +46,13 @@
int uTextureID_GameUI_CharSelectionFrame; // 50C98C
+Image *game_ui_statusbar = nullptr;
+Image *game_ui_rightframe = nullptr;
+Image *game_ui_topframe = nullptr;
+Image *game_ui_leftframe = nullptr;
+Image *game_ui_bottomframe = nullptr;
+
+
GUIWindow_GameMenu::GUIWindow_GameMenu() :
GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, nullptr)
{
@@ -340,7 +349,7 @@
//if ( !pRenderer->bWindowMode && pRenderer->IsGammaSupported() )
{
pRenderer->DrawTextureIndexed(17 * uGammaPos + 42, 162, pIcons_LOD->GetTexture(pTextureIDs_GammaPositions[uGammaPos]));
- pRenderer->DrawTextureRGB(274, 169, &stru_506E40);//review_window
+ pRenderer->DrawTextureNew(274/640.0f, 169/480.0f, gamma_preview_image);
msg_window.uFrameX = 22;
msg_window.uFrameY = 190;
msg_window.uFrameWidth = 211;
@@ -765,7 +774,7 @@
v9 = 0;
pDialogueNPCPortraits[0] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE);
dword_591084 = areWeLoadingTexture;
- uTextureID_right_panel_loop = uTextureID_right_panel;
+ right_panel_loop = right_panel;
if ( !pNPCInfo->Hired() && pNPCInfo->Location2D >= 0 )
{
if ( (signed int)pParty->GetPartyFame() <= pNPCInfo->fame
@@ -863,7 +872,7 @@
window.uFrameWidth -= 10;
window.uFrameZ -= 10;
pRenderer->DrawTextureIndexed(477, 0, pTexture_Dialogue_Background);
- pRenderer->DrawTextureIndexedAlpha(468, 0, (Texture *)(uTextureID_right_panel_loop != -1 ? &pIcons_LOD->pTextures[uTextureID_right_panel_loop] : 0));
+ pRenderer->DrawTextureIndexedAlpha(468, 0, right_panel_loop);
pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, (Texture *)(uTextureID_50795C != -1 ? &pIcons_LOD->pTextures[uTextureID_50795C] : 0));
pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pDialogueNPCPortraits[0]);
@@ -1142,7 +1151,7 @@
pRenderer->GetLeather(8, 352 - pTextHeight, pIcons_LOD->GetTexture(uTextureID_Leather), pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - pTextHeight);
pRenderer->DrawTextureIndexed(8, 347 - pTextHeight, pTexture_591428);
pGUIWindow2->DrawText(pFont, 12, 354 - pTextHeight, 0, FitTextInAWindow(byte_5B0938.data(), pFont, &BranchlessDlg_window, 12, 0), 0, 0, 0);
- pRenderer->DrawTextureRGB(0, 0x160u, pTexture_StatusBar);
+ pRenderer->DrawTextureNew(0, 352/480.0f, game_ui_statusbar);
if ( pGUIWindow2->receives_keyboard_input_2 != WINDOW_INPUT_IN_PROGRESS)
{
if ( pGUIWindow2->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED)
@@ -1340,9 +1349,9 @@
{
GameUI_RightPanel_BookFlashTimer = pParty->uTimePlayed;
- static bool byte_50697C = false; // 50697C
- byte_50697C = !byte_50697C;
- if ( byte_50697C && current_screen_type != SCREEN_REST )
+ static bool _50697C_book_flasher = false; // 50697C
+ _50697C_book_flasher = !_50697C_book_flasher;
+ if (_50697C_book_flasher && current_screen_type != SCREEN_REST )
{
if (bFlashQuestBook) pRenderer->DrawTextureIndexedAlpha(493, 355, pIcons_LOD->GetTexture(uTextureID_ib_td1_A));
if (bFlashAutonotesBook) pRenderer->DrawTextureIndexedAlpha(527, 353, pIcons_LOD->GetTexture(uTextureID_ib_td2_A));
@@ -1350,7 +1359,7 @@
}
else
{
- pRenderer->DrawTextureRGB(468, 0, pTexture_RightFrame);
+ pRenderer->DrawTextureNew(468/640.0f, 0, game_ui_rightframe);
GameUI_DrawHiredNPCs();
}
}
@@ -1425,18 +1434,21 @@
//----- (0041B3B6) --------------------------------------------------------
void GameUI_DrawRightPanel()
{
- pRenderer->DrawTextureIndexedAlpha(pViewport->uViewportBR_X, 0, pIcons_LOD->GetTexture(uTextureID_right_panel));
+ pRenderer->DrawTextureIndexedAlpha(pViewport->uViewportBR_X, 0, right_panel);
}
//----- (0041B3E2) --------------------------------------------------------
void GameUI_DrawRightPanelFrames()
{
- pRenderer->DrawTextureRGB(0, 0, pTexture_TopFrame);
- pRenderer->DrawTextureRGB(0, 8, pTexture_LeftFrame);
- pRenderer->DrawTextureRGB(468, 0, pTexture_RightFrame);
- pRenderer->DrawTextureRGB(0, 352, pTexture_BottomFrame);
+ pRenderer->DrawTextureNew(0, 0, game_ui_topframe);
+ pRenderer->DrawTextureNew(0, 8/480.0f, game_ui_leftframe);
+ pRenderer->DrawTextureNew(468/640.0f, 0, game_ui_rightframe);
+ pRenderer->DrawTextureNew(0, 352 / 480.0f, game_ui_bottomframe);
GameUI_DrawFoodAndGold();
GameUI_DrawRightPanelItems();
+
+ //pRenderer->EndScene();
+ //pRenderer->Present();
}
//----- (0041C047) --------------------------------------------------------
@@ -1445,7 +1457,7 @@
char *v1; // edx@2
int v5; // eax@5
- pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar);
+ pRenderer->DrawTextureNew(0, 352/480.0f, game_ui_statusbar);
if (GameUI_Footer_TimeLeft)
v1 = GameUI_Footer_TimedString.data();
else
@@ -1491,7 +1503,7 @@
if ( pFooterString[0] || GameUI_Footer_TimeLeft || bForceDrawFooter )
{
- pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar);
+ pRenderer->DrawTextureNew(0, 352/480.0f, game_ui_statusbar);
if ( GameUI_Footer_TimeLeft )
{
v1 = GameUI_Footer_TimedString.data();
@@ -1952,7 +1964,6 @@
{
unsigned int face_expression_ID; // eax@17
PlayerFrame *pFrame; // eax@21
- int pTextureID; // eax@57
Texture *pPortrait; // [sp-4h] [bp-1Ch]@27
if ( _A750D8_player_speech_timer )
@@ -2035,15 +2046,20 @@
{
if (PID_TYPE(pTurnEngine->pQueue[i].uPackedID) != OBJECT_Player)
break;
- pTextureID = dword_5079D0;
+
+ auto tex = _5079D0_init_g;
if ( pParty->uFlags & 0x10 )
- pTextureID = dword_5079CC;
+ tex = _5079CC_init_r;
else
{
if ( pParty->uFlags & 0x20 )
- pTextureID = dword_5079C8;
+ tex = _5079C8_init_y;
}
- pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[PID_ID(pTurnEngine->pQueue[i].uPackedID)] - 4, 385, pIcons_LOD->GetTexture(pTextureID));
+ pRenderer->DrawTextureIndexedAlpha(
+ pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[PID_ID(pTurnEngine->pQueue[i].uPackedID)] - 4,
+ 385,
+ tex
+ );
}
}
}
@@ -2055,15 +2071,15 @@
{
if (pParty->pPlayers[i].CanAct() && !pParty->pPlayers[i].uTimeToRecovery)
{
- pTextureID = dword_5079D0;
+ auto tex = _5079D0_init_g;
if ( pParty->uFlags & 0x10 )
- pTextureID = dword_5079CC;
+ tex = _5079CC_init_r;
else
{
if ( pParty->uFlags & 0x20 )
- pTextureID = dword_5079C8;
+ tex = _5079C8_init_y;
}
- pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] - 4, 385, pIcons_LOD->GetTexture(pTextureID));
+ pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] - 4, 385, tex);
}
}
}
@@ -2116,7 +2132,7 @@
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
{
- uchar* pMapLod0 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask;
+ uchar* pMapLod0 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].paletted_pixels;
ushort* pPal = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16;
v73 = (1 << (pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2 + 16)) / (signed int)uZoom;
v20 = (double)(pParty->vPosition.x + 32768) / (double)(1 << (16 - pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2));
@@ -2382,9 +2398,9 @@
}
}
}
- pRenderer->DrawTextureIndexedAlpha(468, 0, pIcons_LOD->GetTexture(uTextureID_Minimap_Loop));//draw minimap_loop
+ pRenderer->DrawTextureIndexedAlpha(468, 0, minimap_loop);
pRenderer->SetUIClipRect(541, 0, 567, 480);
- pRenderer->DrawTextureIndexed(floorf(((double)pParty->sRotationY * 0.1171875) + 0.5f) + 285, 136, pIcons_LOD->GetTexture(uTextureID_Compas));//draw compas
+ pRenderer->DrawTextureIndexed(floorf(((double)pParty->sRotationY * 0.1171875) + 0.5f) + 285, 136, _5079B4_compass);
pRenderer->ResetUIClipRect();
}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/Game.cpp
--- a/Game/Game.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/Game.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1,4 +1,5 @@
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/Party.h"
#include "Engine/LOD.h"
#include "Engine/Events.h"
@@ -56,6 +57,11 @@
#include "Game/GameMenu.h"
+
+Image *gamma_preview_image = nullptr; // 506E40
+
+
+
void DoThatMessageThing()
{
if (pMessageQueue_50CBD0->uNumMessages)
@@ -1445,27 +1451,34 @@
uNumSeconds = (unsigned int)&pPlayer->pInstalledBeacons[uMessageParam];
if (bRecallingBeacon)
{
- if (!*((int *)&pSavegameThumbnails[10 * uMessageParam].pPixels))
- continue;
- v173 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(pPlayer->pInstalledBeacons[uMessageParam].SaveFileID)].pName;
- sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[474], v173);// "Recall to %s"
- GameUI_SetFooterString(pTmpBuf.data());
+
+ __debugbreak();/*indexing error*/ //if (*((int *)&pSavegameThumbnails[10 * uMessageParam].pPixels))
+ {
+ v173 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(pPlayer->pInstalledBeacons[uMessageParam].SaveFileID)].pName;
+ sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[474], v173);// "Recall to %s"
+ GameUI_SetFooterString(pTmpBuf.data());
+ }
continue;
}
pMapNum = pMapStats->GetMapInfo(pCurrentMapName);
pMapName = "Not in Map Stats";
if (pMapNum)
pMapName = pMapStats->pInfos[pMapNum].pName;
- if (!*((int *)&pSavegameThumbnails[10 * uMessageParam].pPixels) || !pMapNum)
+
+ __debugbreak();/*indexing error*/ //if (!*((int *)&pSavegameThumbnails[10 * uMessageParam].pPixels) || !pMapNum)
+ if (!pMapNum)
{
sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[476], pMapName);// "Set to %s"
GameUI_SetFooterString(pTmpBuf.data());
- continue;
}
- v174 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(*(short *)(uNumSeconds + 26))].pName;
- sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[475], (unsigned int)pMapName, v174);// "Set %s over %s"
- GameUI_SetFooterString(pTmpBuf.data());
+ else
+ {
+ v174 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(*(short *)(uNumSeconds + 26))].pName;
+ sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[475], (unsigned int)pMapName, v174);// "Set %s over %s"
+ GameUI_SetFooterString(pTmpBuf.data());
+ }
continue;
+
case UIMSG_CloseAfterInstallBeacon:
dword_50CDC8 = 1;
pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 0, 0);
@@ -1675,7 +1688,7 @@
}
if (!(unsigned __int16)_449B57_test_bit(pParty->_quest_bits, v68))
{
- pRenderer->DrawTextureRGB(0, 0x160u, pTexture_StatusBar);
+ pRenderer->DrawTextureNew(0, 352/480.0f, game_ui_statusbar);
continue;
}
//LABEL_506:
@@ -2254,9 +2267,13 @@
viewparams->bRedrawGameUI = 1;
}
- stru_506E40.Release();
+ if (gamma_preview_image)
+ {
+ gamma_preview_image->Release();
+ gamma_preview_image = nullptr;
+ }
pRenderer->SaveScreenshot("gamma.pcx", 155, 117);
- stru_506E40.LoadPCXFile("gamma.pcx", 0);
+ gamma_preview_image = assets->GetImage_PCXFromFile(L"gamma.pcx");
new OnButtonClick(0x25Au, 0x1C2u, 0, 0, (int)pBtn_GameSettings, 0);
//LABEL_453:
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/Game.h
--- a/Game/Game.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/Game.h Sat Mar 05 01:51:54 2016 +0200
@@ -1,3 +1,6 @@
#pragma once
-void Game_Loop();
\ No newline at end of file
+void Game_Loop();
+
+
+extern struct Image *gamma_preview_image; // 506E40
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/GameMenu.cpp
--- a/Game/GameMenu.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/GameMenu.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1,4 +1,6 @@
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
+#include "Game/Game.h"
#include "Engine/Timer.h"
#include "Engine/LOD.h"
#include "Engine/Party.h"
@@ -592,9 +594,13 @@
viewparams->field_48 = 1;
- stru_506E40.Release();
+ if (gamma_preview_image)
+ {
+ gamma_preview_image->Release();
+ gamma_preview_image = nullptr;
+ }
pRenderer->SaveScreenshot("gamma.pcx", 155, 117);
- stru_506E40.LoadPCXFile("gamma.pcx", 0);
+ gamma_preview_image = assets->GetImage_PCXFromFile(L"gamma.pcx");
while (uGameState == GAME_STATE_PLAYING
&& (
@@ -633,5 +639,9 @@
pGUIWindow_CurrentMenu->Release();
pGUIWindow_CurrentMenu = nullptr;
- stru_506E40.Release();
+ if (gamma_preview_image)
+ {
+ gamma_preview_image->Release();
+ gamma_preview_image = nullptr;
+ }
}
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/GameOver.cpp
--- a/Game/GameOver.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/GameOver.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1,4 +1,5 @@
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/Timer.h"
#include "Engine/texts.h"
#include "Engine/Party.h"
@@ -39,7 +40,7 @@
unsigned __int64 v23; // [sp+C8h] [bp-8h]@5
MSG msg;
- RGBTexture _this; // [sp+Ch] [bp-C4h]@1
+ //RGBTexture _this; // [sp+Ch] [bp-C4h]@1
//RGBTexture::RGBTexture(&this);
dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_4000;
@@ -52,12 +53,17 @@
pRenderer->Present();
//pMediaPlayer->pResetflag = 0;
_449B57_test_bit(pParty->_quest_bits, 99);
- _this.Load("winbg.pcx", 2);
- pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &_this);
- pRenderer->EndScene();
- free(_this.pPixels);
- _this.pPixels = 0;
+
+
+ Image *background = assets->GetImage_PCXFromIconsLOD(L"winbg.pcx");
+ {
+ pRenderer->BeginScene();
+ pRenderer->DrawTextureNew(0, 0, background);
+ pRenderer->EndScene();
+ }
+ background->Release();
+ background = nullptr;
+
window_SpeakInHouse = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
pWindow.uFrameX = 75;
pWindow.uFrameY = 60;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/MainMenu.cpp
--- a/Game/MainMenu.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/MainMenu.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1,8 +1,10 @@
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/Timer.h"
#include "Engine/Party.h"
#include "Engine/LOD.h"
#include "Engine/SaveLoad.h"
+#include "Engine/texts.h"
#include "Engine/Graphics/IRender.h"
#include "Engine/Graphics/Viewport.h"
@@ -13,6 +15,7 @@
#include "GUI/UI/UIPartyCreation.h"
#include "GUI/UI/UISaveLoad.h"
#include "GUI/GUIButton.h"
+#include "GUI/GUIFont.h"
#include "Media/Audio/AudioPlayer.h"
#include "Media/Audio/AIL.h"
@@ -21,7 +24,8 @@
#include "Game/MainMenuLoad.h"
-RGBTexture main_menu_background;
+Image *main_menu_bg = nullptr;
+Image *main_menu_background = nullptr;
@@ -367,28 +371,20 @@
MSG msg;
+ pAudioPlayer->StopChannels(-1, -1);
+ if (!bNoSound && pAudioPlayer)
+ pAudioPlayer->PlayMusicTrack(MUSIC_MainMenu);
if (first_initialization)
{
first_initialization = false;
- RGBTexture tex; // [sp+Ch] [bp-30h]@1
- tex.Load("mm6title.pcx", 2);
+ if (!main_menu_bg)
+ main_menu_bg = assets->GetImage_PCXFromIconsLOD(L"mm6title.pcx");
pRenderer->ResetUIClipRect();
pRenderer->BeginScene();
{
- pRenderer->DrawTextureNew(0, 0, &tex);
- }
- pRenderer->EndScene();
- pRenderer->Present();
-
- tex.Release();
-
- MainMenuUI_LoadFontsAndSomeStuff();
-
- pRenderer->BeginScene();
- {
DrawMM7CopyrightWindow();
}
pRenderer->EndScene();
@@ -398,17 +394,6 @@
Sleep(1500); // let the copyright window stay for a while
#endif
- if (!bNoSound && pAudioPlayer->hAILRedbook)
- {
- unsigned int uTrackStartMS; // [sp+34h] [bp-8h]@8
- unsigned int uTrackEndMS; // [sp+38h] [bp-4h]@8
-
- pAudioPlayer->SetMusicVolume((signed __int64)(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0));
- AIL_redbook_stop(pAudioPlayer->hAILRedbook);
- AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 14, &uTrackStartMS, &uTrackEndMS);
- AIL_redbook_play(pAudioPlayer->hAILRedbook, uTrackStartMS + 1, uTrackEndMS);
- }
-
SecondaryInitialization();
FinalInitialization();
}
@@ -417,38 +402,18 @@
current_screen_type = SCREEN_GAME;
pGUIWindow2 = 0;
- pAudioPlayer->StopChannels(-1, -1);
- pMouse->RemoveHoldingItem();
-
- pIcons_LOD->_inlined_sub2();
pWindow_MainMenu = new GUIWindow_MainMenu();
- main_menu_background.Release();
- main_menu_background.Load("title.pcx", 0);
SetCurrentMenuID(MENU_MAIN);
SetForegroundWindow(window->GetApiHandle());
SendMessageW(window->GetApiHandle(), WM_ACTIVATEAPP, 1, 0);
- //while (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_SAVELOAD)
while (GetCurrentMenuID() == MENU_MAIN)
{
POINT pt;
pMouse->GetCursorPos(&pt);
pWindow = pWindow_MainMenu;
- /*if (GetCurrentMenuID() == MENU_SAVELOAD)
- {
- if (current_screen_type != SCREEN_LOADGAME)
- {
- main_menu_background.Release();
- main_menu_background.Load("lsave640.pcx", 0);
- pGUIWindow2 = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0);
-
- //LoadUI_Load(0);
- pGUIWindow_CurrentMenu = new GUIWindow_Load(false);
- }
- pWindow = pGUIWindow_CurrentMenu;
- }*/
while (PeekMessageW(&msg, 0, 0, 0, PM_REMOVE))
{
@@ -464,9 +429,12 @@
continue;
}
+ if (!main_menu_background)
+ main_menu_background = assets->GetImage_PCXFromIconsLOD(L"title.pcx");
+
pRenderer->BeginScene();
{
- pRenderer->DrawTextureNew(0, 0, &main_menu_background);
+ pRenderer->DrawTextureNew(0, 0, main_menu_background);
MainMenu_EventLoop();
GUI_UpdateWindows();
@@ -483,14 +451,41 @@
pRenderer->EndScene();
pRenderer->Present();
- main_menu_background.Release();
- /*if (pGUIWindow2)
- {
- pGUIWindow2->Release();
- pGUIWindow2 = 0;
- }*/
+ main_menu_background->Release();
+ main_menu_background = nullptr;
+
pWindow_MainMenu->Release();
pWindow_MainMenu = nullptr;
+}
- pIcons_LOD->RemoveTexturesPackFromTextureList();
-}
\ No newline at end of file
+
+
+//----- (00415485) --------------------------------------------------------
+void DrawMM7CopyrightWindow()
+{
+ pRenderer->DrawTextureNew(0, 0, main_menu_bg);
+
+ GUIWindow Dst; // [sp+8h] [bp-54h]@1
+
+ memset(&Dst, 0, sizeof(Dst));
+ Dst.uFrameWidth = 624;
+ Dst.uFrameHeight = 256;
+ Dst.uFrameX = 8;
+ Dst.uFrameY = 30; // c 1999 The 3DO Company.
+ Dst.uFrameHeight = pFontSmallnum->CalcTextHeight(pGlobalTXT_LocalizationStrings[157], &Dst, 24, 0)
+ + 2 * LOBYTE(pFontSmallnum->uFontHeight)
+ + 24;
+ Dst.uFrameY = 470 - Dst.uFrameHeight;
+ Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
+ Dst.uFrameW = 469;
+ //Dst.Hint = "abcagfdsgsg ljsrengvlkjesnfkjwnef";
+ Dst.DrawMessageBox(0);
+
+ Dst.uFrameWidth -= 24;
+ Dst.uFrameX += 12;
+ Dst.uFrameY += 12;
+ Dst.uFrameHeight -= 12;
+ Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
+ Dst.uFrameW = Dst.uFrameY + Dst.uFrameHeight - 1;
+ Dst.DrawTitleText(pFontSmallnum, 0, 12, ui_mainmenu_copyright_color, pGlobalTXT_LocalizationStrings[157], 3);
+}
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/MainMenu.h
--- a/Game/MainMenu.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/MainMenu.h Sat Mar 05 01:51:54 2016 +0200
@@ -4,4 +4,4 @@
void MainMenu_EventLoop();
-extern struct RGBTexture main_menu_background;
\ No newline at end of file
+extern struct Image *main_menu_background;
\ No newline at end of file
diff -r cf29f444ddd7 -r d87bfbd3bb3b Game/MainMenuLoad.cpp
--- a/Game/MainMenuLoad.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Game/MainMenuLoad.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -1,4 +1,5 @@
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "Engine/SaveLoad.h"
#include "Engine/LOD.h"
#include "Engine/Timer.h"
@@ -95,8 +96,14 @@
{
pIcons_LOD->RemoveTexturesPackFromTextureList();
//crt_deconstruct_ptr_6A0118();
- main_menu_background.Release();
- main_menu_background.Load("title.pcx", 0);
+
+ if (main_menu_background)
+ {
+ main_menu_background->Release();
+ main_menu_background = nullptr;
+ }
+ main_menu_background = assets->GetImage_PCXFromIconsLOD(L"title.pcx");
+
SetCurrentMenuID(MENU_MAIN);
current_screen_type = SCREEN_GAME;
pEventTimer->Resume();
@@ -113,8 +120,12 @@
{
current_screen_type = SCREEN_LOADGAME;
- main_menu_background.Release();
- main_menu_background.Load("lsave640.pcx", 0);
+ if (main_menu_background)
+ {
+ main_menu_background->Release();
+ main_menu_background = nullptr;
+ }
+ main_menu_background = assets->GetImage_PCXFromIconsLOD(L"lsave640.pcx");
//LoadUI_Load(0);
pGUIWindow_CurrentMenu = new GUIWindow_Load(false);
@@ -137,7 +148,7 @@
}
pRenderer->BeginScene();
- pRenderer->DrawTextureNew(0, 0, &main_menu_background);
+ pRenderer->DrawTextureNew(0, 0, main_menu_background);
MainMenuLoad_EventLoop();
GUI_UpdateWindows();
diff -r cf29f444ddd7 -r d87bfbd3bb3b Media/Audio/AudioPlayer.cpp
--- a/Media/Audio/AudioPlayer.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Media/Audio/AudioPlayer.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -433,14 +433,15 @@
//----- (004AA13F) --------------------------------------------------------
void AudioPlayer::PlayMusicTrack(MusicID eTrack)
{
- char string[256];
if (!bNoSound && bPlayerReady && uMusicVolimeMultiplier)
{
if ( use_music_folder )
{
alSourceStop(mSourceID);
+ char string[256];
sprintf(string, "Music\\%d.mp3", eTrack);
+
if (!FileExists(string))
{
Log::Warning(L"Music\\%d.mp3 not found", eTrack);
@@ -449,13 +450,13 @@
LPWSTR wStr = new WCHAR[255];
char2wchar_t(string, wStr);
PlayAudio(wStr);
- delete []wStr;
- alSourcef (mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]);
+ delete [] wStr;
+ alSourcef(mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]);
}
else if ( hAILRedbook )
{
AIL_redbook_stop(hAILRedbook);
- AIL_redbook_set_volume(hAILRedbook, (signed)pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f);
+ AIL_redbook_set_volume(hAILRedbook, 64.0f * pSoundVolumeLevels[uMusicVolimeMultiplier]);
AIL_redbook_track_info(hAILRedbook, eTrack, &uCurrentMusicTrackStartMS, &uCurrentMusicTrackEndMS);
AIL_redbook_play(hAILRedbook, uCurrentMusicTrackStartMS + 1, uCurrentMusicTrackEndMS);
uCurrentMusicTrackLength = ((uCurrentMusicTrackEndMS - uCurrentMusicTrackStartMS) * 128) / 1000;
diff -r cf29f444ddd7 -r d87bfbd3bb3b Media/Audio/AudioPlayer.h
--- a/Media/Audio/AudioPlayer.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Media/Audio/AudioPlayer.h Sat Mar 05 01:51:54 2016 +0200
@@ -175,7 +175,8 @@
enum MusicID: unsigned __int32
{
- MUSIC_Credits = 15
+ MUSIC_MainMenu = 14,
+ MUSIC_Credits = 15
};
/* 20 */
diff -r cf29f444ddd7 -r d87bfbd3bb3b Media/MediaPlayer.cpp
--- a/Media/MediaPlayer.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/Media/MediaPlayer.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -6,6 +6,7 @@
#include
#include "Engine/Engine.h"
+#include "Engine/AssetsManager.h"
#include "IO/Mouse.h"
#include "GUI/GUIWindow.h"
@@ -1020,6 +1021,14 @@
{
window = target_window;
+ hVidFile = INVALID_HANDLE_VALUE;
+
+ uNumMightVideoHeaders = 0;
+ pMightVideoHeaders = nullptr;
+
+ uNumMagicVideoHeaders = 0;
+ pMagicVideoHeaders = nullptr;
+
if (bNoVideo)
return;
@@ -1318,7 +1327,7 @@
this->uMovieType = 2;
}
}
- if (!hVidFile)
+ if (hVidFile == INVALID_HANDLE_VALUE)
{
pMediaPlayer->Unload();
MessageBoxA(0, "MediaPlayer error", "MediaPlayer Error", 0);
@@ -1340,7 +1349,7 @@
//----- (004BF794) --------------------------------------------------------
void MPlayer::ShowMM7IntroVideo_and_LoadingScreen()
{
- RGBTexture tex; // [sp+Ch] [bp-30h]@1
+ //RGBTexture tex; // [sp+Ch] [bp-30h]@1
unsigned int uTrackStartMS; // [sp+34h] [bp-8h]@8
unsigned int uTrackEndMS; // [sp+38h] [bp-4h]@8
@@ -1354,11 +1363,10 @@
PlayFullscreenMovie(MOVIE_Intro, true);
}
- tex.Load("mm6title.pcx", 2);
+ Image *tex = assets->GetImage_PCXFromIconsLOD(L"mm6title.pcx");
+
pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &tex);
- free(tex.pPixels);
- tex.pPixels = 0;
+ pRenderer->DrawTextureNew(0, 0, tex);
//LoadFonts_and_DrawCopyrightWindow();
DrawMM7CopyrightWindow();
@@ -1366,25 +1374,16 @@
pRenderer->EndScene();
pRenderer->Present();
+ tex->Release();
+ tex = nullptr;
+
#ifndef _DEBUG
Sleep(1500); // let the copyright window stay for a while
#endif
- if (!bNoSound )
- {
- if ( use_music_folder )
- {
- PlayAudio(L"Music\\14.mp3");
- alSourcef (mSourceID, AL_GAIN, pSoundVolumeLevels[uMusicVolimeMultiplier]);
- }
- else if ( pAudioPlayer->hAILRedbook )
- {
- pAudioPlayer->SetMusicVolume((signed __int64)(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0));
- AIL_redbook_stop(pAudioPlayer->hAILRedbook);
- AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 14, &uTrackStartMS, &uTrackEndMS);
- AIL_redbook_play(pAudioPlayer->hAILRedbook, uTrackStartMS + 1, uTrackEndMS);
- }
- }
+ if (!bNoSound)
+ pAudioPlayer->PlayMusicTrack(MUSIC_MainMenu);
+
bGameoverLoop = false;
}
@@ -1403,8 +1402,11 @@
}
pEventTimer->Resume();
- pMovie_Track->Release();
- delete pMovie_Track;
+ if (pMovie_Track)
+ {
+ pMovie_Track->Release();
+ delete pMovie_Track;
+ }
pMovie_Track = nullptr;
}
@@ -1524,7 +1526,7 @@
bStopBeforeSchedule = false;
// pResetflag = 0;
- pVideoFrame.Release();
+// pVideoFrame.Release();
}
void PlayAudio(const wchar_t * pFilename)
diff -r cf29f444ddd7 -r d87bfbd3bb3b Media/MediaPlayer.h
--- a/Media/MediaPlayer.h Mon Oct 05 00:19:13 2015 +0200
+++ b/Media/MediaPlayer.h Sat Mar 05 01:51:54 2016 +0200
@@ -90,7 +90,7 @@
virtual ~MPlayer();
//for video/////////////////////////////////////////////////
- RGBTexture pVideoFrame;
+ //RGBTexture pVideoFrame;
int field_44;//final video
unsigned int bFirstFrame;
unsigned int bLoopPlaying;
diff -r cf29f444ddd7 -r d87bfbd3bb3b OSAPI.cpp
--- a/OSAPI.cpp Mon Oct 05 00:19:13 2015 +0200
+++ b/OSAPI.cpp Sat Mar 05 01:51:54 2016 +0200
@@ -17,6 +17,12 @@
//----- (00462C94) --------------------------------------------------------
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hprevinstance, wchar_t *lpCmdLine, int nShowCmd)
{
+ #ifndef NDEBUG
+ {
+ //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);
+ }
+ #endif
+
Log::Initialize();
//if (HWND hMM7Window = FindWindowW(L"MM7", 0))