# HG changeset patch
# User Nomad
# Date 1349780948 -7200
# Node ID ac0fb48cd27aacc053595cfe758692112662e53f
# Parent 8b8875f5b359501fe8708da8d83e92886f85a11d
Texture, hwl loading, video player
diff -r 8b8875f5b359 -r ac0fb48cd27a Indoor.cpp
--- a/Indoor.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/Indoor.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -791,7 +791,7 @@
v108 = v4;
if ( v4 )
{
- v6 = HIWORD(v4->palette);
+ v6 = v4->palette_id2;
LOBYTE(v2->uAttributes) |= 0x80u;
v109 = v6;
sub_4AE5F1(v1);
diff -r 8b8875f5b359 -r ac0fb48cd27a LOD.cpp
--- a/LOD.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/LOD.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -3,6 +3,7 @@
#include "Allocator.h"
#include "PaletteManager.h"
#include "Viewport.h"
+#include "Log.h"
#include "mm7_data.h"
@@ -380,7 +381,7 @@
v3 = 0;
do
{
- v4 = v1->pHardwareSprites[v3].pTextureSurface;
+ v4 = (IDirectDrawSurface *)v1->pHardwareSprites[v3].pTextureSurface;
if ( v4 && v4->IsLost() == DDERR_SURFACELOST )
{
v5 = v1->pHardwareSprites[v3].pTexture;
@@ -389,7 +390,7 @@
v5->Release();
v1->pHardwareSprites[v3].pTexture = 0;
}
- v6 = v1->pHardwareSprites[v3].pTextureSurface;
+ v6 = (IDirectDrawSurface *)v1->pHardwareSprites[v3].pTextureSurface;
v6->Release();
v1->pHardwareSprites[v3].pTextureSurface = 0;
pRenderer->MoveSpriteToDevice(&v1->pHardwareSprites[v3]);
@@ -434,7 +435,7 @@
v6 = v1->pHardwareSprites;
if ( v6 )
{
- v7 = v6[v3].pTextureSurface;
+ v7 = (IDirectDrawSurface *)v6[v3].pTextureSurface;
if ( v7 )
{
v7->Release();
@@ -1135,22 +1136,17 @@
//----- (00450D68) --------------------------------------------------------
void Sprite::Release()
{
- Sprite *v1; // esi@1
- IDirectDrawSurface *v2; // eax@3
- IDirect3DTexture2 *v3; // eax@5
+ if (pName)
+ pAllocator->FreeChunk((void *)pName);
+ pName = nullptr;
- v1 = this;
- if ( this->pName )
- pAllocator->FreeChunk((void *)this->pName);
- v2 = v1->pTextureSurface;
- if ( v2 )
- v2->Release();
- v3 = v1->pTexture;
- if ( v3 )
- v3->Release();
- v1->pName = 0;
- v1->pTextureSurface = 0;
- v1->pTexture = 0;
+ if (pTextureSurface)
+ pTextureSurface->Release();
+ pTextureSurface = nullptr;
+
+ if (pTexture)
+ pTexture->Release();
+ pTexture = nullptr;
}
@@ -2623,7 +2619,7 @@
pRenderer->LoadTexture(
v3 - 2,
*((short *)v3 + 17),
- &v1->pHardwareSurfaces[v2],
+ (IDirectDrawSurface4 **)&v1->pHardwareSurfaces[v2],
&v1->pHardwareTextures[v2]);
}
else
@@ -2635,7 +2631,7 @@
pRenderer->LoadTexture(
v5,
*((short *)v3 + 17),
- &v1->pHardwareSurfaces[v2],
+ (IDirectDrawSurface4 **)&v1->pHardwareSurfaces[v2],
&v1->pHardwareTextures[v2]);
free(v5);
}
@@ -2819,12 +2815,7 @@
//----- (0040FC08) --------------------------------------------------------
int LODFile_IconsBitmaps::LoadTextureFromLOD(Texture *pOutTex, const char *pContainer, enum TEXTURE_TYPE eTextureType)
{
- const char *v4; // ebx@1
- LODFile_IconsBitmaps *v5; // edi@1
- FILE *v6; // eax@1
Texture *v8; // esi@3
- char *v9; // eax@8
- void *v10; // ST24_4@8
size_t v11; // eax@14
enum TEXTURE_TYPE v12; // eax@14
signed int v13; // esi@14
@@ -2857,59 +2848,59 @@
int v40; // edx@40
signed int v41; // ecx@43
signed int v42; // ecx@48
- FILE *File; // [sp+14h] [bp-4h]@1
- v4 = pContainer;
- v5 = this;
- v6 = FindContainer(pContainer, 0);
- File = v6;
- if ( !v6 )
+ //v4 = pContainer;
+ //v5 = this;
+ //v6 = FindContainer(pContainer, 0);
+ //File = v6;
+ auto pFile = FindContainer(pContainer, false);
+ if (!pFile)
return -1;
v8 = pOutTex;
- fread(pOutTex, 1u, 0x30u, v6);
- strcpy(v8->pName, v4);
- if ( pRenderer->pRenderD3D && v8->pBits & 2 && v5->dword_011BA8 )
+ fread(pOutTex, 1u, 0x30u, pFile);
+ strcpy(v8->pName, pContainer);
+ if (pRenderer->pRenderD3D && v8->pBits & 2 && dword_011BA8)
{
- if ( !v5->pHardwareSurfaces || !v5->pHardwareTextures )
+ if ( !pHardwareSurfaces || !pHardwareTextures )
{
- v5->pHardwareSurfaces = (struct IDirectDrawSurface **)operator new(0xFA0u);
- v5->pHardwareTextures = (struct IDirect3DTexture2 **)operator new(0xFA0u);
- v9 = (char *)operator new(0x3E8u);
- v10 = v5->pHardwareSurfaces;
- v5->ptr_011BB4 = v9;
- memset(v10, 0, 0xFA0u);
- memset(v5->pHardwareTextures, 0, 0xFA0u);
- memset(v5->ptr_011BB4, 0, 0x3E8u);
+ pHardwareSurfaces = new IDirectDrawSurface *[1000];
+ memset(pHardwareSurfaces, 0, 1000 * sizeof(IDirectDrawSurface4 *));
+
+ pHardwareTextures = new IDirect3DTexture2 *[1000];
+ memset(pHardwareTextures, 0, 1000 * sizeof(IDirect3DTexture2 *));
+
+ ptr_011BB4 = new char[1000];
+ memset(ptr_011BB4, 0, 1000);
}
- if ( *v4 != 'w' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'd' || v4[4] != 'r' )
+ if (strcmp(pContainer, "wtrdr"))//*v4 != 'w' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'd' || v4[4] != 'r' )
{
- if ( *v4 != 'W' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'T' || v4[4] != 'y' || v4[5] != 'l' )
+ if (strcmp(pContainer, "WtrTyl"))//if ( *v4 != 'W' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'T' || v4[4] != 'y' || v4[5] != 'l' )
{
- v14 = v5->uNumLoadedFiles;
+ v14 = uNumLoadedFiles;
}
else
{
- pRenderer->field_1036AC_bitmapid = v5->uNumLoadedFiles;
- v14 = v5->uNumLoadedFiles;
+ pRenderer->field_1036AC_bitmapid = uNumLoadedFiles;
+ v14 = uNumLoadedFiles;
}
v13 = pRenderer->LoadTexture(
- v4,
- LOWORD(v8->palette),
- &v5->pHardwareSurfaces[v14],
- &v5->pHardwareTextures[v14]);
+ pContainer,
+ v8->palette_id1,
+ (IDirectDrawSurface4 **)&pHardwareSurfaces[v14],
+ &pHardwareTextures[v14]);
}
else
{
- v11 = strlen(v4);
+ v11 = strlen(pContainer);
v12 = (enum TEXTURE_TYPE)(int)operator new(v11 + 2);
eTextureType = v12;
*(char *)v12 = 104;
- strcpy((char *)(v12 + 1), v4);
+ strcpy((char *)(v12 + 1), pContainer);
v13 = pRenderer->LoadTexture(
(const char *)eTextureType,
- LOWORD(v8->palette),
- &v5->pHardwareSurfaces[v5->uNumLoadedFiles],
- &v5->pHardwareTextures[v5->uNumLoadedFiles]);
+ v8->palette_id1,
+ (IDirectDrawSurface4 **)&pHardwareSurfaces[uNumLoadedFiles],
+ &pHardwareTextures[uNumLoadedFiles]);
free((void *)eTextureType);
}
return v13;
@@ -2917,12 +2908,12 @@
v15 = v8->uTextureSize;
v16 = &v8->uDecompressedSize;
pOutTex = (Texture *)v8->uTextureSize;
- if ( !v8->uDecompressedSize || v5->dword_011BA4 )
+ if ( !v8->uDecompressedSize || dword_011BA4 )
{
v20 = pAllocator;
v32 = pAllocator->AllocNamedChunk(v8->pLevelOfDetail0, v15, v8->pName);
v8->pLevelOfDetail0 = (unsigned __int8 *)v32;
- fread(v32, 1u, (size_t)pOutTex, File);
+ fread(v32, 1u, (size_t)pOutTex, pFile);
}
else
{
@@ -2930,7 +2921,7 @@
v18 = v8->uTextureSize;
pContainer = (const char *)v17;
v19 = malloc(v18);
- fread(v19, 1u, (size_t)pOutTex, File);
+ fread(v19, 1u, (size_t)pOutTex, pFile);
zlib::MemUnzip((void *)pContainer, &v8->uDecompressedSize, v19, v8->uTextureSize);
v8->uTextureSize = *v16;
free(v19);
@@ -2976,7 +2967,7 @@
{
v33 = pAllocator->AllocNamedChunk(v8->pPalette24, 0x300u, v8->pName);
v8->pPalette24 = (unsigned __int8 *)v33;
- fread(v33, 1u, 0x300u, File);
+ fread(v33, 1u, 0x300u, pFile);
}
else
{
@@ -2987,14 +2978,14 @@
v38 = 0;
do
{
- fread((char *)&eTextureType + 3, 1u, 1u, File);
- fread((char *)&pContainer + 3, 1u, 1u, File);
- v39 = fread((char *)&pOutTex + 3, 1u, 1u, File);
- LOWORD(v39) = (unsigned __int8)(BYTE3(eTextureType) >> (8 - LOBYTE(v5->uTextureRedBits)));
- v8->pPalette16[v38] = v39 << (LOBYTE(v5->uTextureBlueBits) + LOBYTE(v5->uTextureGreenBits));
- LOWORD(v40) = (unsigned __int8)(BYTE3(pContainer) >> (8 - LOBYTE(v5->uTextureGreenBits)));
- v8->pPalette16[v38] += v40 << v5->uTextureBlueBits;
- v8->pPalette16[v38] += (unsigned __int8)(BYTE3(pOutTex) >> (8 - LOBYTE(v5->uTextureBlueBits)));
+ fread((char *)&eTextureType + 3, 1u, 1u, pFile);
+ fread((char *)&pContainer + 3, 1u, 1u, pFile);
+ v39 = fread((char *)&pOutTex + 3, 1u, 1u, pFile);
+ LOWORD(v39) = (unsigned __int8)(BYTE3(eTextureType) >> (8 - LOBYTE(uTextureRedBits)));
+ v8->pPalette16[v38] = v39 << (LOBYTE(uTextureBlueBits) + LOBYTE(uTextureGreenBits));
+ LOWORD(v40) = (unsigned __int8)(BYTE3(pContainer) >> (8 - LOBYTE(uTextureGreenBits)));
+ v8->pPalette16[v38] += v40 << uTextureBlueBits;
+ v8->pPalette16[v38] += (unsigned __int8)(BYTE3(pOutTex) >> (8 - LOBYTE(uTextureBlueBits)));
++v38;
}
while ( v38 < 256 );
@@ -3120,50 +3111,57 @@
//----- (0040FB20) --------------------------------------------------------
unsigned int LODFile_IconsBitmaps::LoadTexture(const char *pContainer, enum TEXTURE_TYPE uTextureType)
{
- LODFile_IconsBitmaps *v3; // esi@1
- unsigned int v4; // edi@1
- Texture *v5; // ebx@2
+ //LODFile_IconsBitmaps *v3; // esi@1
+ //unsigned int v4; // edi@1
+ //Texture *v5; // ebx@2
unsigned int v6; // ebx@8
const char *Sourcea; // [sp+14h] [bp+8h]@9
- v3 = this;
- v4 = 0;
+ //v3 = this;
+ //v4 = 0;
areWeLoadingTexture = 1;
- if ( (signed int)this->uNumLoadedFiles <= 0 )
- {
-LABEL_5:
- if ( (signed int)v3->uNumLoadedFiles >= 1000 )
+
+ for (uint i = 0; i < uNumLoadedFiles; ++i)
+ if (!strcmpi(pContainer, pTextures[i].pName))
+ return i;
+
+// if (!uNumLoadedFiles)
+// {
+//LABEL_5:
+ if (uNumLoadedFiles >= 1000)
+ {
+ Log::Warning(L"Maximum texture number exceeded");
AbortWithError();
- if ( v3->LoadTextureFromLOD(&v3->pTextures[v3->uNumLoadedFiles], pContainer, uTextureType) == -1 )
+ }
+ if (LoadTextureFromLOD(&pTextures[uNumLoadedFiles], pContainer, uTextureType) == -1)
{
v6 = 0;
- if ( (signed int)v3->uNumLoadedFiles > 0 )
+ if (uNumLoadedFiles > 0)
{
- Sourcea = (const char *)v3->pTextures;
+ Sourcea = (const char *)pTextures;
while ( _strcmpi(Sourcea, "pending") )
{
Sourcea += 72;
++v6;
- if ( (signed int)v6 >= (signed int)v3->uNumLoadedFiles )
+ if (v6 >= uNumLoadedFiles)
goto LABEL_15;
}
return v6;
}
LABEL_15:
- v3->LoadTextureFromLOD(&v3->pTextures[v3->uNumLoadedFiles], "pending", uTextureType);
+ LoadTextureFromLOD(&pTextures[uNumLoadedFiles], "pending", uTextureType);
}
areWeLoadingTexture = 0;
- ++v3->uNumLoadedFiles;
- return v3->uNumLoadedFiles - 1;
- }
- v5 = this->pTextures;
- while ( _strcmpi(v5->pName, pContainer) )
- {
- ++v4;
- ++v5;
- if ( (signed int)v4 >= (signed int)v3->uNumLoadedFiles )
- goto LABEL_5;
- }
- return v4;
+ ++uNumLoadedFiles;
+ return uNumLoadedFiles - 1;
+// }
+// v5 = pTextures;
+// while ( _strcmpi(v5->pName, pContainer) )
+// {
+// ++v4;
+// ++v5;
+// if (v4 >= uNumLoadedFiles )
+// goto LABEL_5;
+// }
+// return v4;
}
-// 506128: using guessed type int areWeLoadingTexture;
\ No newline at end of file
diff -r 8b8875f5b359 -r ac0fb48cd27a Might and Magic Trilogy.suo
Binary file Might and Magic Trilogy.suo has changed
diff -r 8b8875f5b359 -r ac0fb48cd27a Might and Magic Trilogy.vcxproj
--- a/Might and Magic Trilogy.vcxproj Fri Oct 05 16:07:14 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,288 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
-
- {4CB238C2-3039-4BF6-966A-1ED1285BE23B}
- Win32Proj
- MightandMagicTrilogy
-
-
-
- Application
- true
- Unicode
-
-
- Application
- false
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
- true
- $(ProjectName)
-
-
- false
-
-
-
-
-
- Level3
- Disabled
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- ProgramDatabase
- MultiThreadedDebug
- $(IntDir)/%(RelativeDir)
-
-
- Windows
- true
- $(OutDir)$(TargetName)$(TargetExt)
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
-
-
- Windows
- true
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MultiThreadedDebug
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 8b8875f5b359 -r ac0fb48cd27a Might and Magic Trilogy.vcxproj.user
--- a/Might and Magic Trilogy.vcxproj.user Fri Oct 05 16:07:14 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-
-
-
- $(ProjectDir)\..\..\
- WindowsLocalDebugger
-
-
\ No newline at end of file
diff -r 8b8875f5b359 -r ac0fb48cd27a Outdoor.cpp
--- a/Outdoor.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/Outdoor.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -1477,7 +1477,7 @@
v149 = (void *)(v20 != -1 ? &pBitmaps_LOD->pTextures[v20] : 0);
auto pTex = (Texture *)v149;
if (pTex)
- pTex->palette = pPaletteManager->LoadPalette(pTex->palette);
+ pTex->palette_id2 = pPaletteManager->LoadPalette(pTex->palette_id1);
goto LABEL_20;
}
pTextureFrameTable->LoadAnimationSequenceAndPalettes(
@@ -1613,11 +1613,11 @@
v36 = v5->uSky_TextureID;
v5->uMainTile_BitmapID = v35;
if ( v36 != -1 )
- HIWORD(pBitmaps_LOD->pTextures[v36].palette) = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v36].palette);
+ pBitmaps_LOD->pTextures[v36].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v36].palette_id1);
v37 = v5->uMainTile_BitmapID;
if ( v37 != -1 )
- HIWORD(pBitmaps_LOD->pTextures[v37].palette) = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v37].palette);
+ pBitmaps_LOD->pTextures[v37].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v37].palette_id1);
v5->_47F0E2();
pGameLoadingUI_ProgressBar->Progress();
@@ -1813,9 +1813,9 @@
LABEL_68:
v63->uTextureID = v62;
v145 = (signed __int16)v62 != -1 ? (int)&pBitmaps_LOD->pTextures[(signed __int16)v62] : 0;
- v108 = ((signed __int16)v62 != -1 ? LOWORD(pBitmaps_LOD->pTextures[(signed __int16)v62].palette) : 36);
+ v108 = ((signed __int16)v62 != -1 ? pBitmaps_LOD->pTextures[(signed __int16)v62].palette_id1 : 36);
if ((signed __int16)v62 != -1)
- HIWORD(pBitmaps_LOD->pTextures[v62].palette) = pPaletteManager->LoadPalette(v108);
+ pBitmaps_LOD->pTextures[v62].palette_id2 = pPaletteManager->LoadPalette(v108);
goto LABEL_69;
}
v108 = *(unsigned __int16 *)((char *)&v5->pBModels[v48].pFaces->uTextureID + (unsigned int)v149);
@@ -2159,9 +2159,9 @@
v5->uMainTile_BitmapID = v99;
if ( v99 != -1 )
{
- v108 = *(short *)(v99 != -1 ? &pBitmaps_LOD->pTextures[v99].palette : (int *)36);
+ v108 = (v99 != -1 ? pBitmaps_LOD->pTextures[v99].palette_id1 : 36);
if (v99 != -1)
- HIWORD(pBitmaps_LOD->pTextures[v99].palette) = pPaletteManager->LoadPalette(v108);
+ pBitmaps_LOD->pTextures[v99].palette_id2 = pPaletteManager->LoadPalette(v108);
}
v5->_47F0E2();
LABEL_150:
@@ -2188,9 +2188,9 @@
v5->uSky_TextureID = v101;
if ( v101 != -1 )
{
- v108 = *(short *)(v101 != -1 ? &pBitmaps_LOD->pTextures[v101].palette : (int *)36);
+ v108 = (v101 != -1 ? pBitmaps_LOD->pTextures[v101].palette_id1 : 36);
if (v101 != -1)
- HIWORD(pBitmaps_LOD->pTextures[v101].palette) = pPaletteManager->LoadPalette(v108);
+ pBitmaps_LOD->pTextures[v101].palette_id2 = pPaletteManager->LoadPalette(v108);
}
pPaletteManager->RecalculateAll();
pSoundList->_4A9A67(53, 0);
@@ -2567,7 +2567,7 @@
{
if ( v1 != -1 ? (int)v3 : 0 )
v3->uDecompressedSize = v2->pTerrain._47CB57((int)v3->pLevelOfDetail0,
- HIWORD(v3->palette),
+ v3->palette_id2,
v3->uTextureWidth * v3->uTextureHeight);
++v1;
++v3;
diff -r 8b8875f5b359 -r ac0fb48cd27a Render.cpp
--- a/Render.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/Render.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -127,8 +127,8 @@
IDirect3DTexture2 *pTexture1; // [sp+1Ch] [bp-4h]@1
v0 = false;
- pRenderer->pRenderD3D->CreateTexture(64u, 64u, (IDirectDrawSurface **)&pSurface1, &pTexture1, 1u, 0, 32u);
- pRenderer->pRenderD3D->CreateTexture(64u, 64u, (IDirectDrawSurface **)&pSurface2, &pTexture2, 1u, 0, 32u);
+ pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface1, &pTexture1, true, false, 32u);
+ pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface2, &pTexture2, true, false, 32u);
ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture1));
ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u));
@@ -647,7 +647,7 @@
&& pParty->uCurrentHour < 0x15
|| bUnderwater )
{
- v2 = (stru148 *)*(short *)PaletteManager::Get_Mist_or_Red_LUT(HIWORD(array_77EC08[1999].pTexture->palette), 31, 1);
+ v2 = (stru148 *)*(short *)PaletteManager::Get_Mist_or_Red_LUT(array_77EC08[1999].pTexture->palette_id2, 31, 1);
a1b = (unsigned int)v2;
if ( (signed int)v9 <= 0 )
return (signed __int16)v2;
@@ -4199,30 +4199,29 @@
//----- (0049E5D4) --------------------------------------------------------
-bool RenderD3D::CreateTexture(unsigned int uTextureWidth, unsigned int uTextureHeight, IDirectDrawSurface **pOutSurface, IDirect3DTexture2 **pOutTexture, unsigned int bAlphaChannel, unsigned int bMipmaps, unsigned int uMinDeviceTexDim)
+bool RenderD3D::CreateTexture(unsigned int uTextureWidth, unsigned int uTextureHeight, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture, bool bAlphaChannel, bool bMipmaps, unsigned int uMinDeviceTexDim)
{
unsigned int v8; // edx@4
unsigned int v9; // ebx@5
unsigned int v10; // eax@5
DWORD v11; // edx@5
- int v12; // edx@7
+ //int v12; // edx@7
DDSURFACEDESC2 ddsd2; // [sp+Ch] [bp-80h]@1
- RenderD3D *v15; // [sp+88h] [bp-4h]@1
-
- v15 = this;
+ //RenderD3D *v15; // [sp+88h] [bp-4h]@1
+
+ //v15 = this;
memset(&ddsd2, 0, 0x7Cu);
ddsd2.dwSize = 0x7Cu;
- ddsd2.dwFlags = 0x1007u; // DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT
- ddsd2.ddsCaps.dwCaps = 0x1000u; // DDSCAPS_TEXTURE
- ddsd2.ddsCaps.dwCaps2 = 0x10u; // DDSCAPS2_TEXTUREMANAGE
+ ddsd2.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
+ ddsd2.ddsCaps.dwCaps = DDSCAPS_TEXTURE;
+ ddsd2.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE;
ddsd2.dwHeight = uTextureHeight;
ddsd2.dwWidth = uTextureWidth;
if ( bMipmaps )
{
if ( (signed int)uTextureHeight <= (signed int)uTextureWidth )
{
- GetMaxMipLevels(uTextureHeight); // BUG actually v12 = GetMaxMipLevels
- v8 = v12 - GetMaxMipLevels(uMinDeviceTexDim);
+ v8 = GetMaxMipLevels(uTextureHeight) - GetMaxMipLevels(uMinDeviceTexDim);
LABEL_8:
ddsd2.dwMipMapCount = v8;
if ( !v8 )
@@ -4249,36 +4248,36 @@
ddsd2.dwMipMapCount = 1;
}
LABEL_11:
- ddsd2.dwFlags = 0x21007u; // DDSD_MIPMAPCOUNT
- ddsd2.ddsCaps.dwCaps = 0x401008u; // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP
+ ddsd2.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_MIPMAPCOUNT;
+ ddsd2.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP;
LABEL_12:
- ddsd2.ddpfPixelFormat.dwBBitMask = 0x1Fu;
- ddsd2.ddpfPixelFormat.dwRGBBitCount = 0x10u;
- ddsd2.ddpfPixelFormat.dwSize = 32;
- if ( bAlphaChannel )
- {
- ddsd2.ddpfPixelFormat.dwFlags = 0x41u; // DDPF_RGB | DDPF_ALPHAPIXELS
- *(_QWORD *)&ddsd2.ddpfPixelFormat.dwRBitMask = 0x3E000007C00ui64;
+ ddsd2.ddpfPixelFormat.dwRGBBitCount = 16;
+ ddsd2.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+ if (bAlphaChannel)
+ {
+ ddsd2.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
+ ddsd2.ddpfPixelFormat.dwRBitMask = 0x7C00;
+ ddsd2.ddpfPixelFormat.dwGBitMask = 0x03E0;
+ ddsd2.ddpfPixelFormat.dwBBitMask = 0x001F;
ddsd2.ddpfPixelFormat.dwRGBAlphaBitMask = 0x8000u;
}
else
{
- ddsd2.ddpfPixelFormat.dwFlags = 0x40u; // DDPF_RGB
- *(_QWORD *)&ddsd2.ddpfPixelFormat.dwRBitMask = 0x7E00000F800ui64;
+ ddsd2.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ ddsd2.ddpfPixelFormat.dwRBitMask = 0xF800;
+ ddsd2.ddpfPixelFormat.dwGBitMask = 0x07E0;
+ ddsd2.ddpfPixelFormat.dwBBitMask = 0x001F;
ddsd2.ddpfPixelFormat.dwRGBAlphaBitMask = 0;
}
- if ( v15->pHost->CreateSurface(&ddsd2, (LPDIRECTDRAWSURFACE4 *)pOutSurface, 0) )
- return 0;
- if ( (*pOutSurface)->QueryInterface(IID_IDirect3DTexture2, (LPVOID *)pOutTexture) )
- {
- if ( *pOutSurface )
- {
- (*pOutSurface)->Release();
- *pOutSurface = 0;
- }
- return 0;
- }
- return 1;
+ if (FAILED(pHost->CreateSurface(&ddsd2, pOutSurface, 0)))
+ return false;
+ if (FAILED((*pOutSurface)->QueryInterface(IID_IDirect3DTexture2, (void **)pOutTexture)))
+ {
+ (*pOutSurface)->Release();
+ *pOutSurface = 0;
+ return false;
+ }
+ return true;
}
//----- (004A5190) --------------------------------------------------------
@@ -5686,19 +5685,11 @@
}
}
}
-// 4E800C: using guessed type int bWinNT4_0;
//----- (0049FFD7) --------------------------------------------------------
void Render::CreateSomeTexture()
{
- pRenderD3D->CreateTexture(
- 64u,
- 64u,
- (IDirectDrawSurface **)&this->pSurface,
- &this->pTexture,
- 1u,
- 0,
- 32u);
+ pRenderD3D->CreateTexture(64, 64, &pSurface, &pTexture, true, false, 32);
}
//----- (0049FFFB) --------------------------------------------------------
@@ -8761,15 +8752,15 @@
//----- (004A4DE1) --------------------------------------------------------
-int Render::LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface **pOutSurface, IDirect3DTexture2 **pOutTexture)
-{
- const char *v5; // ebx@1
- Render *v6; // edi@1
- HWLTexture *pHWLTexture; // esi@1
- signed int result; // eax@1
- IDirectDrawSurface **v9; // ebx@9
+bool Render::LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture)
+{
+ //const char *v5; // ebx@1
+ //Render *v6; // edi@1
+ //HWLTexture *pHWLTexture; // esi@1
+ //signed int result; // eax@1
+ //IDirectDrawSurface **v9; // ebx@9
IDirectDrawSurface4 *v10; // edi@11
- int v11; // ebx@11
+ //int v11; // ebx@11
HRESULT v12; // eax@14
unsigned __int16 *v13; // ecx@19
unsigned __int16 *v14; // eax@19
@@ -8780,25 +8771,21 @@
DDSCAPS2 v19; // [sp+E8h] [bp-1Ch]@13
int v20; // [sp+100h] [bp-4h]@12
- v5 = pName;
- v6 = this;
- pHWLTexture = pD3DBitmaps.LoadTexture(pName, bMipMaps);
- result = 0;
+ auto pHWLTexture = pD3DBitmaps.LoadTexture(pName, bMipMaps);
if ( pHWLTexture )
{
- bMipMaps = *v5 == 72 && v5[1] == 68 && v5[2] == 87 && v5[3] == 84 && v5[4] == 82;
- v9 = pOutSurface;
+ bMipMaps = !strncmp(pName, "HDWTR", 5);
if ( !pRenderD3D->CreateTexture(
pHWLTexture->uWidth,
pHWLTexture->uHeight,
pOutSurface,
pOutTexture,
- 1u,
+ true,
bMipMaps,
- v6->uMinDeviceTextureDim) )
+ uMinDeviceTextureDim) )
Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0);
- v10 = (IDirectDrawSurface4 *)*v9;
- v11 = 0;
+ v10 = *pOutSurface;
+ //v11 = 0;
if ( bMipMaps )
{
Dst._450DDE();
@@ -8806,9 +8793,9 @@
Dst._450DF1((const char *)dword_4EFCBC, (const char *)dword_4EFCBC);
while ( 1 )
{
- memset(&v19, v11, 0x10u);
+ memset(&v19, 0, 0x10u);
v19.dwCaps = 0x401000u; // DDSCAPS_TEXTURE | DDSCAPS_MIPMAP
- memset(&desc, v11, 0x7Cu);
+ memset(&desc, 0, 0x7Cu);
desc.dwSize = 124;
if ( LockSurface_DDraw4(v10, &desc, 0x21u) )
{
@@ -8829,7 +8816,7 @@
if ( v10->GetAttachedSurface(&v19, (LPDIRECTDRAWSURFACE4 *)&pName) )
break;
v10 = (IDirectDrawSurface4 *)pName;
- v11 = 0;
+ //v11 = 0;
}
v20 = -1;
//nullsub_1();
@@ -8871,9 +8858,9 @@
}
free(pHWLTexture->pPixels);
free(pHWLTexture);
- result = 1;
- }
- return result;
+ return true;
+ }
+ return false;
}
//----- (004A5048) --------------------------------------------------------
@@ -11034,14 +11021,14 @@
//----- (004524D8) --------------------------------------------------------
HWLTexture *RenderHWLContainer::LoadTexture(const char *pName, int bMipMaps)
{
- RenderHWLContainer *v3; // esi@1
+ //RenderHWLContainer *v3; // esi@1
unsigned int v4; // eax@1
int v5; // ebx@2
int v6; // edi@3
- HWLTexture *result; // eax@8
- HWLTexture *pTex; // edi@9
- char *v9; // ebx@9
- unsigned __int16 *v10; // eax@9
+ //HWLTexture *result; // eax@8
+ //HWLTexture *pTex; // edi@9
+ //char *v9; // ebx@9
+ //unsigned __int16 *v10; // eax@9
int v11; // eax@13
int v12; // ecx@13
void *v13; // eax@13
@@ -11055,7 +11042,7 @@
int v21; // ecx@16
int v22; // eax@16
int v23; // esi@16
- char Str1[20]; // [sp+Ch] [bp-28h]@1
+ //char Str1[20]; // [sp+Ch] [bp-28h]@1
unsigned int pSource; // [sp+20h] [bp-14h]@10
unsigned __int16 *v26; // [sp+24h] [bp-10h]@13
int v27; // [sp+28h] [bp-Ch]@14
@@ -11065,55 +11052,56 @@
void *pDestc; // [sp+3Ch] [bp+8h]@10
int pDestb; // [sp+3Ch] [bp+8h]@15
- v3 = this;
- sprintf(Str1, "%s", pName);
- v4 = v3->uNumItems;
- if ( v4 && (v5 = 0, pDesta = v3->uNumItems, (signed int)v4 > 0) )
+ //v3 = this;
+ //sprintf(Str1, "%s", pName);
+ v4 = uNumItems;
+ if ( v4 && (v5 = 0, pDesta = uNumItems, (signed int)v4 > 0) )
{
while ( 1 )
{
v6 = v5 + (pDesta - v5) / 2;
- if ( !_strcmpi(Str1, v3->pSpriteNames[v6]) )
+ if ( !_strcmpi(pName, pSpriteNames[v6]) )
break;
- if ( _strcmpi(Str1, v3->pSpriteNames[v6]) <= 0 )
+ if ( _strcmpi(pName, pSpriteNames[v6]) <= 0 )
pDesta = v5 + (pDesta - v5) / 2;
else
v5 = v6 + 1;
if ( v5 >= pDesta )
- goto LABEL_8;
+ return false;
}
fseek(pFile, pSpriteOffsets[v6], SEEK_SET);
- pTex = new HWLTexture;
- fread(&DstBuf, 4u, 1u, v3->pFile);
- fread(&pTex->field_18, 4u, 1u, v3->pFile);
- fread(&pTex->field_1C, 4u, 1u, v3->pFile);
- fread(&pTex->field_20, 4u, 1u, v3->pFile);
- fread(&pTex->field_24, 4u, 1u, v3->pFile);
- v9 = (char *)&pTex->uWidth;
- fread(&pTex->uWidth, 4u, 1u, v3->pFile);
- fread(&pTex->uHeight, 4u, 1u, v3->pFile);
- fread(&pTex->field_30, 4u, 1u, v3->pFile);
- fread(&pTex->field_34, 4u, 1u, v3->pFile);
- v10 = new unsigned __int16[pTex->uWidth * pTex->uHeight];
- pTex->pPixels = v10;
+
+ auto pTex = new HWLTexture;
+ fread(&DstBuf, 4u, 1u, pFile);
+ fread(&pTex->field_18, 4u, 1u, pFile);
+ fread(&pTex->field_1C, 4u, 1u, pFile);
+ fread(&pTex->field_20, 4u, 1u, pFile);
+ fread(&pTex->field_24, 4u, 1u, pFile);
+ //v9 = (char *)&pTex->uWidth;
+ fread(&pTex->uWidth, 4u, 1u, pFile);
+ fread(&pTex->uHeight, 4u, 1u, pFile);
+ fread(&pTex->field_30, 4u, 1u, pFile);
+ fread(&pTex->field_34, 4u, 1u, pFile);
+ //v10 = new unsigned __int16[pTex->uWidth * pTex->uHeight];
+ pTex->pPixels = new unsigned __int16[pTex->uWidth * pTex->uHeight];
if ( DstBuf )
{
pDestc = new char[DstBuf];
- fread(pDestc, 1u, DstBuf, v3->pFile);
- pSource = 2 * *(unsigned int *)v9 * pTex->uHeight;
+ fread(pDestc, 1u, DstBuf, pFile);
+ pSource = 2 * pTex->uWidth * pTex->uHeight;
zlib::MemUnzip(pTex->pPixels, &pSource, pDestc, DstBuf);
delete [] pDestc;
}
else
{
- fread(v10, 2u, *(unsigned int *)v9 * pTex->uHeight, v3->pFile);
- }
- if ( v3->field_61A94_scale_hwls_to_half )
- {
- v11 = (signed int)pTex->uHeight / 2;
- v12 = *(unsigned int *)v9 / 2;
+ fread(pTex->pPixels, 2, pTex->uWidth * pTex->uHeight, pFile);
+ }
+ if ( field_61A94_scale_hwls_to_half )
+ {
+ v11 = pTex->uHeight / 2;
+ v12 = pTex->uWidth / 2;
pTex->uHeight = v11;
- *(unsigned int *)v9 = v12;
+ pTex->uWidth = v12;
v13 = new unsigned __int16[v12 * v11];
v28 = 0;
v14 = pTex->uHeight == 0;
@@ -11121,7 +11109,7 @@
v26 = (unsigned __int16 *)v13;
if ( !(v15 | v14) )
{
- v16 = *(unsigned int *)v9;
+ v16 = pTex->uWidth;
v27 = 1;
do
{
@@ -11140,26 +11128,26 @@
LOWORD(v21) = *(unsigned short *)v21;
v23 = pDestb++ + v18;
v26[v23] = sub_452442(*(unsigned short *)v22, *(unsigned short *)(v22 + 2), v21, v20);
- v16 = *(unsigned int *)v9;
+ v16 = pTex->uWidth;
}
- while ( pDestb < *(unsigned int *)v9 );
+ while (pDestb < pTex->uWidth);
}
++v28;
v27 += 2;
}
while ( v28 < (signed int)pTex->uHeight );
}
- free(pTex->pPixels);
+ delete [] pTex->pPixels;
pTex->pPixels = v26;
}
- result = pTex;
+ return pTex;
+ //result = pTex;
}
else
{
-LABEL_8:
- result = 0;
- }
- return result;
+//LABEL_8:
+ return nullptr;
+ }
}
//----- (0045271F) --------------------------------------------------------
diff -r 8b8875f5b359 -r ac0fb48cd27a Render.h
--- a/Render.h Fri Oct 05 16:07:14 2012 +0200
+++ b/Render.h Tue Oct 09 13:09:08 2012 +0200
@@ -200,7 +200,7 @@
unsigned int GetDeviceCaps();
void ClearTarget(unsigned int bClearColor, unsigned int uClearColor, unsigned int bClearDepth, float z_clear);
void Present(bool bForceBlit);
- bool CreateTexture(unsigned int uTextureWidth, unsigned int uTextureHeight, IDirectDrawSurface **pOutSurface, IDirect3DTexture2 **pOutTexture, unsigned int bAlphaChannel, unsigned int bMipmaps, unsigned int uMinDeviceTexDim);
+ bool CreateTexture(unsigned int uTextureWidth, unsigned int uTextureHeight, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture, bool bAlphaChannel, bool bMipmaps, unsigned int uMinDeviceTexDim);
void HandleLostResources();
@@ -301,7 +301,7 @@
int _4A48E4(int a2, int a3, int a4, int a5, int a6);
void DrawProjectile(float srcX, float srcY, float a3, float a4, float dstX, float dstY, float a7, float a8, IDirect3DTexture2 *a9);
void _4A4CC9(struct stru6_stru1_indoor_sw_billboard *a1, int a2);
- int LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface **pOutSurface, IDirect3DTexture2 **pOutTexture);
+ bool LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture);
HWLTexture *MoveSpriteToDevice(Sprite *pSprite);
void BeginScene();
void EndScene();
diff -r 8b8875f5b359 -r ac0fb48cd27a Sprites.h
--- a/Sprites.h Fri Oct 05 16:07:14 2012 +0200
+++ b/Sprites.h Tue Oct 09 13:09:08 2012 +0200
@@ -9,7 +9,7 @@
const char *pName;
int uPaletteID;
- struct IDirectDrawSurface *pTextureSurface;
+ struct IDirectDrawSurface4 *pTextureSurface;
struct IDirect3DTexture2 *pTexture;
int uAreaX;
int uAreaY;
diff -r 8b8875f5b359 -r ac0fb48cd27a Texture.cpp
--- a/Texture.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/Texture.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -306,7 +306,7 @@
v3->pTextures[i].uTextureID = pBitmaps_LOD->LoadTexture(v3->pTextures[i].pTextureName, TEXTURE_DEFAULT);
auto pTex = (v3->pTextures[i].uTextureID != -1 ? &pBitmaps_LOD->pTextures[v3->pTextures[i].uTextureID] : 0);
if (pTex)
- pTex->palette = pPaletteManager->LoadPalette(pTex->palette);
+ pTex->palette_id2 = pPaletteManager->LoadPalette(pTex->palette_id1);
result = (unsigned int)v3->pTextures;
if ( !(*(char *)(result + i * 20 + 18) & 1) )
break;
@@ -402,34 +402,34 @@
//----- (0040F77C) --------------------------------------------------------
void Texture::Release()
{
- Texture *v1; // esi@1
- char v2; // zf@2
+ if (this)
+ {
+ pName[0] = 0;
- v1 = this;
- if ( this )
- {
- v2 = (pBits & 0x0400) == 0;
- this->pName[0] = 0;
- if ( v2 )
+ if (pBits & 0x0400)
{
pAllocator->FreeChunk(pLevelOfDetail0);
pAllocator->FreeChunk(pPalette16);
pAllocator->FreeChunk(pPalette24);
}
- v1->pLevelOfDetail0 = 0;
- v1->pLevelOfDetail1 = 0;
- v1->pLevelOfDetail2 = 0;
- v1->pLevelOfDetail3 = 0;
- v1->pPalette16 = 0;
- v1->pPalette24 = 0;
- v1->uSizeOfMaxLevelOfDetail = 0;
- v1->uTextureSize = 0;
- v1->uTextureHeight = 0;
- v1->uTextureWidth = 0;
- v1->uHeightLn2 = 0;
- v1->uWidthLn2 = 0;
- v1->palette = 0;
- LOWORD(v1->pBits) = 0;
+
+ pLevelOfDetail0 = nullptr;
+ pLevelOfDetail1 = nullptr;
+ pLevelOfDetail2 = nullptr;
+ pLevelOfDetail3 = nullptr;
+
+ pPalette16 = nullptr;
+ pPalette24 = nullptr;
+
+ uSizeOfMaxLevelOfDetail = 0;
+ uTextureSize = 0;
+ uTextureHeight = 0;
+ uTextureWidth = 0;
+ uHeightLn2 = 0;
+ uWidthLn2 = 0;
+ palette_id1 = 0;
+ palette_id2 = 0;
+ pBits &= 0xFFFF0000;
}
}
@@ -506,20 +506,21 @@
//----- (0040F5BE) --------------------------------------------------------
Texture::Texture()
{
- this->pName[0] = 0;
- this->uSizeOfMaxLevelOfDetail = 0;
- this->uTextureSize = 0;
- this->uTextureHeight = 0;
- this->uTextureWidth = 0;
- this->uHeightLn2 = 0;
- this->uWidthLn2 = 0;
- this->palette = 0;
- this->pLevelOfDetail0 = 0;
- this->pLevelOfDetail3 = 0;
- this->pLevelOfDetail2 = 0;
- this->pLevelOfDetail1 = 0;
- this->pPalette16 = 0;
- this->pPalette24 = 0;
+ pName[0] = 0;
+ uSizeOfMaxLevelOfDetail = 0;
+ uTextureSize = 0;
+ uTextureHeight = 0;
+ uTextureWidth = 0;
+ uHeightLn2 = 0;
+ uWidthLn2 = 0;
+ palette_id1 = 0;
+ palette_id2 = 0;
+ pLevelOfDetail0 = 0;
+ pLevelOfDetail3 = 0;
+ pLevelOfDetail2 = 0;
+ pLevelOfDetail1 = 0;
+ pPalette16 = 0;
+ pPalette24 = 0;
}
//----- (0040F414) --------------------------------------------------------
diff -r 8b8875f5b359 -r ac0fb48cd27a Texture.h
--- a/Texture.h Fri Oct 05 16:07:14 2012 +0200
+++ b/Texture.h Tue Oct 09 13:09:08 2012 +0200
@@ -47,7 +47,8 @@
__int16 uHeightLn2;
__int16 uWidthMinus1;
__int16 uHeightMinus1;
- int palette;
+ short palette_id1;
+ short palette_id2;
unsigned int uDecompressedSize;
int pBits;
unsigned __int8 *pLevelOfDetail0;
diff -r 8b8875f5b359 -r ac0fb48cd27a mm7_1.cpp
--- a/mm7_1.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/mm7_1.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -3110,7 +3110,7 @@
{
v13 = &pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]];
v106.field_C = v115 + v106.uViewportY + v13->uBufferHeight;
- v222 = v13->pTextureSurface;
+ v222 = (IDirectDrawSurface *)v13->pTextureSurface;
memset(&Dst, 0, 0x64u);
Dst.dwSize = 100;
Dst.dwFillColor = 0;
diff -r 8b8875f5b359 -r ac0fb48cd27a mm7_2.cpp
--- a/mm7_2.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/mm7_2.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -13097,7 +13097,7 @@
do
{
if ( pIndoor->pFaces[v12].uBitmapID != -1 )
- HIWORD(pBitmaps_LOD->pTextures[pIndoor->pFaces[v12].uBitmapID].palette) = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[pIndoor->pFaces[v12].uBitmapID].palette);
+ pBitmaps_LOD->pTextures[pIndoor->pFaces[v12].uBitmapID].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[pIndoor->pFaces[v12].uBitmapID].palette_id1);
++i;
++v12;
}
@@ -13863,7 +13863,7 @@
//----- (004637EB) --------------------------------------------------------
-signed int __stdcall aWinProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam)
+int __stdcall aWinProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam)
{
unsigned int v4; // esi@1
Render *v5; // ecx@14
@@ -14080,10 +14080,13 @@
{
if ( Msg == WM_WINDOWPOSCHANGED )
{
- if ( pVideoPlayer->AnyMovieLoaded() && pVideoPlayer->pBinkBuffer )
- {
- BinkBufferSetOffset(pVideoPlayer->pBinkBuffer, 0, 0);
- return DefWindowProcA(hWnd, Msg, wParam, v4);
+ if (pVideoPlayer)
+ {
+ if (pVideoPlayer->AnyMovieLoaded() && pVideoPlayer->pBinkBuffer)
+ {
+ BinkBufferSetOffset(pVideoPlayer->pBinkBuffer, 0, 0);
+ return DefWindowProcA(hWnd, Msg, wParam, v4);
+ }
}
goto _def_wnd_proc;
}
@@ -15428,7 +15431,7 @@
pVideoPlayer = new VideoPlayer;
pVideoPlayer->Initialize();
- BYTE1(dword_6BE364_game_settings_1) |= 0x40u;
+ dword_6BE364_game_settings_1 |= 0x4000;
if ( uTurnSpeed )
{
@@ -15449,7 +15452,7 @@
{
uTurnSpeed = (unsigned int)uCPUSpeed < 0xC7 ? 128 : 64;
}
- return 1;
+ return true;
}
@@ -15467,7 +15470,7 @@
int v6; // ecx@6
int v7; // edx@7
ObjectDesc *v8; // eax@7
- signed int v9; // esi@8
+ //signed int v9; // esi@8
signed int v10; // ebx@14
signed int v11; // esi@15
char pContainer[32]; // [sp+10h] [bp-Ch]@9
@@ -15537,13 +15540,12 @@
flt_6BE3A0 = 0.55000001f;
MainMenuUI_Create();
pGame->pStru6Instance->LoadAnimations();
- v9 = 0;
- do
- {
- sprintf(pContainer, "HDWTR%03u", v9);
- pRenderer->pHDWaterBitmapIDs[v9++] = pBitmaps_LOD->LoadTexture(pContainer);
- }
- while ( v9 < 7 );
+
+ for (uint i = 0; i < 7; ++i)
+ {
+ sprintf(pContainer, "HDWTR%03u", i);
+ pRenderer->pHDWaterBitmapIDs[i] = pBitmaps_LOD->LoadTexture(pContainer);
+ }
pNPCStats = new NPCStats;
pNPCStats->Initialize();
diff -r 8b8875f5b359 -r ac0fb48cd27a mm7_3.cpp
--- a/mm7_3.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/mm7_3.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -9673,7 +9673,7 @@
v4 = a2;
if ( pParty->field_1613C )
{
- result = PaletteManager::Get(HIWORD(a2->pTexture->palette));
+ result = PaletteManager::Get(a2->pTexture->palette_id2);
}
else
{
@@ -9698,7 +9698,7 @@
a3a = 1;
if ( pParty->field_1613C )
{
- result = PaletteManager::Get(HIWORD(a1->pTexture->palette));
+ result = PaletteManager::Get(a1->pTexture->palette_id2);
}
else
{
@@ -9709,7 +9709,7 @@
{
if ( v6 != -1 || a4 != -1 )
{
- v7 = HIWORD(v4->pTexture->palette);
+ v7 = v4->pTexture->palette_id2;
}
else
{
@@ -9720,7 +9720,7 @@
}
else
{
- result = PaletteManager::Get_Dark_or_Red_LUT(HIWORD(v4->pTexture->palette), v6, a3a);
+ result = PaletteManager::Get_Dark_or_Red_LUT(v4->pTexture->palette_id2, v6, a3a);
}
}
return result;
@@ -9759,7 +9759,7 @@
a2a = 1;
if ( pParty->field_1613C )
{
- result = (char *)pPaletteManager->field_199600_palettes[HIWORD(a1->pTexture->palette)];
+ result = (char *)pPaletteManager->field_199600_palettes[a1->pTexture->palette_id2];
}
else
{
@@ -9769,14 +9769,14 @@
if ( v9 == 1 )
{
if ( a3 != -1 || a4 != -1 )
- v7 = HIWORD(v4->pTexture->palette);
+ v7 = v4->pTexture->palette_id2;
else
v7 = 0;
result = (char *)PaletteManager::_47C30E_get_palette(v7, a2a);
}
else
{
- result = (char *)PaletteManager::_47C33F_get_palette(HIWORD(v4->pTexture->palette), a2a);
+ result = (char *)PaletteManager::_47C33F_get_palette(v4->pTexture->palette_id2, a2a);
}
}
return result;
@@ -19198,7 +19198,7 @@
v12 = v2;
if ( v2 != -1 ? (int)&pBitmaps_LOD->pTextures[v2] : 0 )
{
- HIWORD(pBitmaps_LOD->pTextures[v2].palette) = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v2].palette);
+ pBitmaps_LOD->pTextures[v2].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v2].palette_id1);
if ( uCurrentlyLoadedLevelType == 1 )
{
diff -r 8b8875f5b359 -r ac0fb48cd27a mm7_4.cpp
--- a/mm7_4.cpp Fri Oct 05 16:07:14 2012 +0200
+++ b/mm7_4.cpp Tue Oct 09 13:09:08 2012 +0200
@@ -1722,7 +1722,7 @@
{
v2->pTiles[v3].uBitmapID = pBitmaps_LOD->LoadTexture(v4->pTileName);
if ( v2->pTiles[v3].uBitmapID != -1 )
- HIWORD(pBitmaps_LOD->pTextures[v2->pTiles[v3].uBitmapID].palette) = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v2->pTiles[v3].uBitmapID].palette);
+ pBitmaps_LOD->pTextures[v2->pTiles[v3].uBitmapID].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[v2->pTiles[v3].uBitmapID].palette_id1);
}
++i;
}
@@ -8692,7 +8692,7 @@
v50 = v10;
sub_4AF412();
++pBLVRenderParams->field_80;
- v11 = sr_sub_47C24C_get_palette(v2, HIWORD(v4->palette), 0, 1);
+ v11 = sr_sub_47C24C_get_palette(v2, v4->palette_id2, 0, 1);
v12 = stru_F8A590._viewport_space_y;
v51 = v11;
v60 = stru_F8A590._viewport_space_y;