# HG changeset patch # User a.parshin # Date 1457480392 -7200 # Node ID a76d408c5132af4bb695bd40417e58d9450b18f8 # Parent dd36326a9994bfa53556eb8e0840932b1b8ceaad DrawTranslucent -> DrawTextureGrayShade Removed old texture drawing stuff diff -r dd36326a9994 -r a76d408c5132 Build/Visual Studio 2015/World of Might and Magic.vcxproj --- a/Build/Visual Studio 2015/World of Might and Magic.vcxproj Mon Mar 07 03:48:40 2016 +0200 +++ b/Build/Visual Studio 2015/World of Might and Magic.vcxproj Wed Mar 09 01:39:52 2016 +0200 @@ -135,7 +135,6 @@ - @@ -313,7 +312,6 @@ - diff -r dd36326a9994 -r a76d408c5132 Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters --- a/Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters Mon Mar 07 03:48:40 2016 +0200 +++ b/Build/Visual Studio 2015/World of Might and Magic.vcxproj.filters Wed Mar 09 01:39:52 2016 +0200 @@ -474,9 +474,6 @@ Engine - - Engine - Engine @@ -1247,9 +1244,6 @@ Engine - - Engine - Engine diff -r dd36326a9994 -r a76d408c5132 Engine/Engine.cpp --- a/Engine/Engine.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Engine.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -15,7 +15,6 @@ #include "Engine/LuaVM.h" #include "Engine/MMT.h" #include "Engine/SaveLoad.h" -#include "Engine/Registry.h" #include "Engine/Graphics/Vis.h" #include "Engine/Graphics/Weather.h" #include "Engine/Graphics/LightmapBuilder.h" @@ -961,13 +960,11 @@ static_assert(sizeof(ObjectDesc_mm6) == 52, "Wrong type size"); static_assert(sizeof(ObjectDesc) == 56, "Wrong type size"); static_assert(sizeof(DecorationDesc) == 84, "Wrong type size"); - static_assert(sizeof(IconFrame) == 32, "Wrong type size"); static_assert(sizeof(PlayerFrame) == 10, "Wrong type size"); static_assert(sizeof(TextureFrame) == 20, "Wrong type size"); static_assert(sizeof(SpriteFrame) == 60, "Wrong type size"); static_assert(sizeof(RenderVertexSoft) == 0x30, "Wrong type size"); static_assert(sizeof(RenderBillboard) == 0x34, "Wrong type size"); - static_assert(sizeof(Texture_MM7) == 0x48, "Wrong type size"); //static_assert(sizeof(RGBTexture) == 0x28, "Wrong type size"); //static_assert(sizeof(LODFile_IconsBitmaps) == 0x11BB8 + 4, "Wrong type size"); // + virtual dtor ptr static_assert(sizeof(AudioPlayer) == 0xC84, "Wrong type size"); @@ -998,7 +995,7 @@ static_assert(sizeof(Actor) == 0x344, "Wrong type size"); 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(UIAnimation) == 0xD, "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"); @@ -1692,8 +1689,9 @@ { 606, 0, 0, 0 } }; - pUIAnims[i]->uIconID = pIconsFrameTable->FindIcon(pUIAnimNames[i]); - pIconsFrameTable->InitializeAnimation(pUIAnims[i]->uIconID); + //pUIAnims[i]->uIconID = pIconsFrameTable->FindIcon(pUIAnimNames[i]); + pUIAnims[i]->icon = pIconsFrameTable->GetIcon(pUIAnimNames[i]); + pIconsFrameTable->InitializeAnimation(pUIAnims[i]->icon->id); pUIAnims[i]->uAnimLength = 0; pUIAnims[i]->uAnimTime = 0; diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/IRender.h --- a/Engine/Graphics/IRender.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/IRender.h Wed Mar 09 01:39:52 2016 +0200 @@ -81,18 +81,17 @@ virtual void BlendTextures(unsigned int a2, unsigned int a3, struct Image *a4, struct Texture_MM7 *a5, int t, int start_opacity, int end_opacity) = 0; virtual void _4A65CC(unsigned int x, unsigned int y, struct Texture_MM7 *a4, struct Texture_MM7 *a5, int a6, int a7, int a8) = 0; + virtual void DrawMasked(float u, float v, struct Image *img, unsigned int color_dimming_level, unsigned __int16 mask) = 0; + virtual void DrawTextureGrayShade(float u, float v, struct Image *a4) = 0; virtual void DrawTransparentRedShade(float u, float v, struct Image *a4) = 0; virtual void DrawTransparentGreenShade(float u, float v, struct Image *pTexture) = 0; virtual void DrawFansTransparent(const RenderVertexD3D3 *vertices, unsigned int num_vertices) = 0; - virtual void DrawMasked(float u, float v, struct Image *pTexture, unsigned __int16 mask) = 0; - virtual void DrawTextAlpha(int x, int y, unsigned char* font_pixels, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, bool present_time_transparency) = 0; virtual void DrawText(signed int uOutX, signed int uOutY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor) = 0; virtual void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16) = 0; virtual void _4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, void *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7) = 0; - virtual void DrawTranslucent(unsigned int a2, unsigned int a3, struct Texture_MM7 *a4) = 0; virtual void DrawBuildingsD3D() = 0; diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/Indoor.h --- a/Engine/Graphics/Indoor.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/Indoor.h Wed Mar 09 01:39:52 2016 +0200 @@ -480,7 +480,7 @@ #define FACE_FLOW_HORIZONTAL 0x00000800 // Horizontal flow of the lava or water #define FACE_HAS_EVENT_HINT 0x00001000 #define FACE_INVISIBLE 0x00002000 -#define FACE_TEXTURE_FRAME 0x00004000 // Texture_MM7 ID is a frameset from TextureFrameTable, otherwise BitmapID +#define FACE_TEXTURE_FRAME 0x00004000 // Texture ID is a frameset from TextureFrameTable, otherwise BitmapID #define FACE_OUTLINED 0x00010000 // outline face edges #define FACE_INDOOR_DOOR 0x00020000 #define FACE_TEXTURE_FLOW 0x00040000 // The texture moves slowly. For horizontal facets only. diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/Overlays.cpp --- a/Engine/Graphics/Overlays.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/Overlays.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -83,7 +83,7 @@ //----- (00441964) -------------------------------------------------------- void OtherOverlayList::DrawTurnBasedIcon(int a2) { - IconFrame *frame; // eax@12 + Icon *frame; // eax@12 unsigned int v5; // [sp-8h] [bp-Ch]@4 if ( current_screen_type != SCREEN_GAME || !pParty->bTurnBasedModeOn) @@ -102,7 +102,7 @@ else if ( pTurnEngine->turn_stage == TE_ATTACK )//группа атакует(ладонь) frame = pIconsFrameTable->GetFrame(uIconID_TurnStop, pEventTimer->uStartTime); //if ( pRenderer->pRenderD3D ) - pRenderer->DrawTextureTransparentColorKey(394, 288, &pIcons_LOD->pTextures[frame->uTextureID]); + pRenderer->DrawTextureAlphaNew(394/640.0f, 288/480.0f, frame->texture); /*else pRenderer->DrawTextureIndexedAlpha(0x18Au, 0x120u, v7);*/ if ( dword_50C994 < dword_50C998_turnbased_icon_1A ) diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/Render.cpp --- a/Engine/Graphics/Render.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/Render.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -31,7 +31,6 @@ #include "Lights.h" #include "Level/Decoration.h" #include "Vis.h" -#include "Engine/Registry.h" #include "Weather.h" #include "Engine/MMT.h" @@ -6370,12 +6369,6 @@ 0xF800 & (r << (6 + 5 + 5 - 8)); } -void Render::DrawTextureNew(float u, float v, Texture_MM7 *a4) -{ - __debugbreak(); -} - - void Render::DrawTextureCustomHeight(float u, float v, class Image *img, int custom_height) @@ -6522,145 +6515,9 @@ } //----- (004A6E7E) -------------------------------------------------------- -void Render::DrawTranslucent(unsigned int a2, unsigned int a3, Texture_MM7 *a4) -{ - int v5; // edx@4 - unsigned int v6; // edi@4 - unsigned int v7; // edx@5 - unsigned int v8; // edx@6 - unsigned int v9; // edx@7 - unsigned int v10; // edx@8 - unsigned int v11; // ebx@9 - unsigned int v12; // esi@11 - unsigned int v13; // edx@12 - unsigned int v14; // ebx@15 - unsigned int v15; // esi@17 - unsigned int v16; // edi@18 - int v18; // [sp+14h] [bp-Ch]@4 - int v19; // [sp+18h] [bp-8h]@4 - unsigned __int8 *v20; // [sp+1Ch] [bp-4h]@4 - - if ( this->uNumSceneBegins && a4 && a4->pPalette16 ) - { - //v4 = &this->pTargetSurface[a2 + a3 * this->uTargetSurfacePitch]; - v20 = a4->paletted_pixels; - v5 = a4->uTextureWidth; - v6 = a4->uTextureHeight; - v19 = a4->uTextureWidth; - v18 = a4->uTextureWidth; - int clipped_out_x = a2; - int clipped_out_y = a3; - if ( this->bClip ) - { - v7 = this->uClipX; - if ( (signed int)a2 < (signed int)v7 ) - { - v8 = v7 - a2; - v20 += v8; - v19 += a2 - this->uClipX; - //v4 += v8; - clipped_out_x = uClipX; - } - v9 = this->uClipY; - if ( (signed int)a3 < (signed int)v9 ) - { - v10 = v9 - a3; - v20 += v18 * v10; - v6 = a3 - this->uClipY + a4->uTextureHeight; - //v4 += this->uTargetSurfacePitch * v10; - clipped_out_y = uClipY; - } - v11 = this->uClipX; - v5 = v19; - if ( (signed int)v11 < (signed int)a2 ) - v11 = a2; - v12 = this->uClipZ; - if ( (signed int)(v19 + v11) > (signed int)v12 ) - { - v13 = this->uClipX; - if ( (signed int)v13 < (signed int)a2 ) - v13 = a2; - v5 = v12 - v13; - } - v14 = this->uClipY; - if ( (signed int)v14 < (signed int)a3 ) - v14 = a3; - v15 = this->uClipW; - if ( (signed int)(v6 + v14) > (signed int)v15 ) - { - v16 = this->uClipY; - if ( (signed int)v16 < (signed int)a3 ) - v16 = a3; - v6 = v15 - v16; - } - } - - for (uint y = 0; y < v6; ++y) - { - for (int x = 0; x < v5; ++x) - { - if ( *v20 ) - WritePixel16(clipped_out_x + x, clipped_out_y + y, ((unsigned int)a4->pPalette16[*v20] >> 1) & 0x7BEF); - ++v20; - } - v20 += v18 - v5; - } - - /*if ( pRenderer->uTargetGBits == 5 ) - { - if ( (signed int)v6 > 0 ) - { - v23 = v6; - do - { - if ( v5 > 0 ) - { - v21 = v5; - do - { - if ( *v20 ) - *v4 = ((unsigned int)a4->pPalette16[*v20] >> 1) & 0x3DEF; - ++v4; - ++v20; - --v21; - } - while ( v21 ); - } - v20 += v18 - v5; - v17 = v23-- == 1; - v4 += this->uTargetSurfacePitch - v5; - } - while ( !v17 ); - } - } - else - { - if ( (signed int)v6 > 0 ) - { - v24 = v6; - do - { - if ( v5 > 0 ) - { - v22 = v5; - do - { - if ( *v20 ) - *v4 = ((unsigned int)a4->pPalette16[*v20] >> 1) & 0x7BEF; - ++v4; - ++v20; - --v22; - } - while ( v22 ); - } - v20 += v18 - v5; - v17 = v24-- == 1; - v4 += this->uTargetSurfacePitch - v5; - } - while ( !v17 ); - } - }*/ - } +void Render::DrawTextureGrayShade(float u, float v, Image *img) +{ + DrawMasked(u, v, img, 1, 0x7BEF); } //----- (004A6DF5) -------------------------------------------------------- @@ -6973,18 +6830,18 @@ //----- (004A68EF) -------------------------------------------------------- void Render::DrawTransparentGreenShade(float u, float v, Image *pTexture) { - DrawMasked(u, v, pTexture, 0x07E0); + DrawMasked(u, v, pTexture, 0, 0x07E0); } //----- (004A6776) -------------------------------------------------------- void Render::DrawTransparentRedShade(float u, float v, Image *a4) { - DrawMasked(u, v, a4, 0xF800); + DrawMasked(u, v, a4, 0, 0xF800); } //----- (004A68EF) -------------------------------------------------------- -void Render::DrawMasked(float u, float v, Image *pTexture, unsigned __int16 mask) +void Render::DrawMasked(float u, float v, Image *pTexture, unsigned int color_dimming_level, unsigned __int16 mask) { unsigned int v5; // ebx@4 int v10; // edx@8 @@ -7072,7 +6929,7 @@ WritePixel16( clipped_out_x + x, clipped_out_y + y, - Color16((*pixels >> 16) & 0xFF, (*pixels >> 8) & 0xFF, *pixels & 0xFF) & mask + (Color16((*pixels >> 16) & 0xFF, (*pixels >> 8) & 0xFF, *pixels & 0xFF) >> color_dimming_level) & mask ); ++pixels; } @@ -7376,7 +7233,7 @@ } - +/* //----- (004A6274) -------------------------------------------------------- void Render::DrawTextureIndexedAlpha(unsigned int uX, unsigned int uY, Texture_MM7 *pTexture) { @@ -7453,7 +7310,8 @@ } } } -} +}*/ + //----- (004A612A) -------------------------------------------------------- void Render::ZDrawTextureAlpha(float u, float v, Image *img, int zVal) @@ -7627,7 +7485,7 @@ } - +/* //----- (004A5EB2) -------------------------------------------------------- void Render::DrawTextureTransparentColorKey(signed int x, signed int y, Texture_MM7 *tex) { @@ -7714,7 +7572,7 @@ } } } -} +}*/ diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/Render.h --- a/Engine/Graphics/Render.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/Render.h Wed Mar 09 01:39:52 2016 +0200 @@ -263,18 +263,17 @@ virtual void BlendTextures(unsigned int a2, unsigned int a3, struct Image *a4, struct Texture_MM7 *a5, int t, int start_opacity, int end_opacity); virtual void _4A65CC(unsigned int x, unsigned int y, struct Texture_MM7 *a4, struct Texture_MM7 *a5, int a6, int a7, int a8); + virtual void DrawMasked(float u, float v, struct Image *img, unsigned int color_dimming_level, unsigned __int16 mask); + virtual void DrawTextureGrayShade(float u, float v, struct Image *a4); virtual void DrawTransparentRedShade(float u, float v, struct Image *a4); virtual void DrawTransparentGreenShade(float u, float v, struct Image *pTexture); virtual void DrawFansTransparent(const RenderVertexD3D3 *vertices, unsigned int num_vertices); - virtual void DrawMasked(float u, float v, struct Image *pTexture, unsigned __int16 mask); - virtual void DrawTextAlpha(int x, int y, unsigned char* font_pixels, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, bool present_time_transparency); virtual void DrawText(signed int uOutX, signed int uOutY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor); virtual void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16); virtual void _4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, void *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7); - virtual void DrawTranslucent(unsigned int a2, unsigned int a3, struct Texture_MM7 *a4); virtual void DrawBuildingsD3D(); //struct BSPModel *DrawBuildingsSW(); diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/RenderD3D11.cpp --- a/Engine/Graphics/RenderD3D11.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/RenderD3D11.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -65,11 +65,11 @@ void RenderD3D11::DrawTransparentRedShade(float u, float v, struct Image *a4) {__debugbreak();} void RenderD3D11::DrawTransparentGreenShade(float u, float v, struct Image *pTexture) {__debugbreak();} void RenderD3D11::DrawFansTransparent(const RenderVertexD3D3 *vertices, unsigned int num_vertices) {__debugbreak();} -void RenderD3D11::DrawMasked(float u, float v, struct Image *pTexture, unsigned __int16 mask) {__debugbreak();} +void RenderD3D11::DrawMasked(float u, float v, struct Image *pTexture, unsigned int, unsigned __int16 mask) {__debugbreak();} void RenderD3D11::DrawTextureCustomHeight(float u, float v, class Image *img, int height) {__debugbreak();} void RenderD3D11::FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16) {__debugbreak();} void RenderD3D11::_4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, void *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7) {__debugbreak();} -void RenderD3D11::DrawTranslucent(unsigned int a2, unsigned int a3, struct Texture_MM7 *a4) {__debugbreak();} +void RenderD3D11::DrawTextureGrayShade(float a2, float a3, struct Image *a4) {__debugbreak();} void RenderD3D11::DrawBuildingsD3D() {__debugbreak();} void RenderD3D11::DrawIndoorSky(unsigned int uNumVertices, unsigned int uFaceID) {__debugbreak();} void RenderD3D11::DrawOutdoorSkyD3D() {__debugbreak();} @@ -146,11 +146,6 @@ } -void RenderD3D11::DrawTextureTransparentColorKey(signed int x, signed int y, struct Texture_MM7 *tex) -{ - PrepareTextureIndexed(tex); - 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) @@ -158,18 +153,6 @@ __debugbreak(); } -void RenderD3D11::DrawTextureIndexedAlpha(unsigned int uX, unsigned int uY, struct Texture_MM7 *a4) -{ - PrepareTextureIndexed(a4); - DrawTexture((float)uX / window->GetWidth(), (float)uY / window->GetHeight(), a4->uTextureWidth, a4->uTextureHeight, a4->d3d11_srv, ui_blend_alpha); -} - - -void RenderD3D11::DrawTextureNew(float u, float v, Texture_MM7 *tex) -{ - __debugbreak(); -} - void RenderD3D11::DrawTextureNew(float u, float v, Image *tex) { diff -r dd36326a9994 -r a76d408c5132 Engine/Graphics/RenderD3D11.h --- a/Engine/Graphics/RenderD3D11.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Graphics/RenderD3D11.h Wed Mar 09 01:39:52 2016 +0200 @@ -81,27 +81,23 @@ virtual void DrawTextureNew(float u, float v, struct Image *); virtual void DrawTextureAlphaNew(float u, float v, struct Image *); virtual void DrawTextureCustomHeight(float u, float v, class Image *img, int height); - //virtual void DrawTextureNew(float u, float v, struct Texture_MM7 *); - //virtual void DrawTextureTransparentColorKey(signed int x, signed int y, struct Texture_MM7 *tex); - //virtual void DrawTextureIndexedAlpha(unsigned int uX, unsigned int uY, struct Texture_MM7 *pTexture); virtual void ZBuffer_Fill_2(signed int a2, signed int a3, struct Image *pTexture, int a5); virtual void ZDrawTextureAlpha(float u, float v, struct Image *pTexture, int zVal); virtual void BlendTextures(unsigned int a2, unsigned int a3, struct Image *a4, struct Texture_MM7 *a5, int t, int start_opacity, int end_opacity); virtual void _4A65CC(unsigned int x, unsigned int y, struct Texture_MM7 *a4, struct Texture_MM7 *a5, int a6, int a7, int a8); + virtual void DrawMasked(float u, float v, struct Image *img, unsigned int color_dimming_level, unsigned __int16 mask); + virtual void DrawTextureGrayShade(float u, float v, struct Image *a4); virtual void DrawTransparentRedShade(float u, float v, struct Image *a4); virtual void DrawTransparentGreenShade(float u, float v, struct Image *pTexture); virtual void DrawFansTransparent(const RenderVertexD3D3 *vertices, unsigned int num_vertices); - virtual void DrawMasked(float u, float v, struct Image *pTexture, unsigned __int16 mask); - virtual void DrawTextAlpha(int x, int y, unsigned char* font_pixels, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, bool present_time_transparency); virtual void DrawText(signed int uOutX, signed int uOutY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor); virtual void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16); virtual void _4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, void *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7); - virtual void DrawTranslucent(unsigned int a2, unsigned int a3, struct Texture_MM7 *a4); virtual void DrawBuildingsD3D(); diff -r dd36326a9994 -r a76d408c5132 Engine/LOD.cpp --- a/Engine/LOD.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/LOD.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -1795,7 +1795,7 @@ } //----- (00410522) -------------------------------------------------------- -int LODFile_IconsBitmaps::_410522(Texture_MM7 *pDst, const char *pContainer, unsigned int uTextureType) +int LODFile_IconsBitmaps::PlacementLoadTexture(Texture_MM7 *pDst, const char *pContainer, unsigned int uTextureType) { void *v9; // ST2C_4@6 int v15; // ecx@12 diff -r dd36326a9994 -r a76d408c5132 Engine/LOD.h --- a/Engine/LOD.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/LOD.h Wed Mar 09 01:39:52 2016 +0200 @@ -159,7 +159,7 @@ void ReleaseHardwareTextures(); void ReleaseLostHardwareTextures(); void _410423_move_textures_to_device(); - int _410522(struct Texture_MM7 *pDst, const char *pContainer, unsigned int uTextureType); + int PlacementLoadTexture(struct Texture_MM7 *pDst, const char *pContainer, unsigned int uTextureType); void SetupPalettes(unsigned int uTargetRBits, unsigned int uTargetGBits, unsigned int uTargetBBits); void ReleaseAll2(); void RemoveTexturesPackFromTextureList(); diff -r dd36326a9994 -r a76d408c5132 Engine/Objects/Chest.cpp --- a/Engine/Objects/Chest.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Objects/Chest.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -218,8 +218,8 @@ bool Chest::CanPlaceItemAt( signed int test_cell_position, int item_id, signed int uChestID ) { // int v3; // eax@1 - unsigned int item_texture_id; // eax@1 - Texture_MM7 *item_texture; // ecx@1 + //unsigned int item_texture_id; // eax@1 + //Image *item_texture; // ecx@1 signed int v6; // eax@1 // signed int v7; // edi@3 signed int v8; // eax@3 @@ -235,21 +235,30 @@ chest_cell_heght = pChestHeightsByType[pChests[uChestID].uChestBitmapID]; chest_cell_width = pChestWidthsByType[pChests[uChestID].uChestBitmapID]; - item_texture_id = pIcons_LOD->LoadTexture(pItemsTable->pItems[item_id].pIconName, TEXTURE_16BIT_PALETTE); - item_texture = pIcons_LOD->GetTexture(item_texture_id); - v6 = item_texture->uTextureWidth; + + auto item_texture = assets->GetImage_16BitColorKey(pItemsTable->pItems[item_id].pIconName, 0x7FF); + //item_texture_id = pIcons_LOD->LoadTexture(pItemsTable->pItems[item_id].pIconName, TEXTURE_16BIT_PALETTE); + //item_texture = pIcons_LOD->GetTexture(item_texture_id); + v6 = item_texture->GetWidth(); if ( v6 < 14 ) v6 = 14; texture_cell_width = ((v6 - 14) >> 5) + 1; - v8 = item_texture->uTextureHeight; + v8 = item_texture->GetHeight(); if ( v8 < 14 ) v8 = 14; texture_cell_height = ((v8 - 14) >> 5) + 1; - if ( !areWeLoadingTexture ) + + if (item_texture) + { + item_texture->Release(); + item_texture = nullptr; + } + /*if ( !areWeLoadingTexture ) { item_texture->Release(); pIcons_LOD->SyncLoadedFilesCount(); - } + }*/ + if ( (texture_cell_width + test_cell_position % chest_cell_width <= chest_cell_width) && (texture_cell_height + test_cell_position / chest_cell_width <= chest_cell_heght) ) { //we not put over borders @@ -312,9 +321,9 @@ ItemGen *v4; // edi@1 int v5; // esi@1 int result; // eax@11 - unsigned int v7; // eax@12 + //unsigned int v7; // eax@12 int v8; // edx@12 - Texture_MM7 *texture; // ecx@12 + //Texture_MM7 *texture; // ecx@12 signed int v10; // eax@12 signed int v11; // edi@14 unsigned int v12; // esi@14 @@ -351,15 +360,18 @@ pPlayers[uActiveCharacter]->PlaySound(SPEECH_NoRoom, 0); return 0; } - v7 = pIcons_LOD->LoadTexture(v4->GetIconName(), TEXTURE_16BIT_PALETTE); HIWORD(v8) = 0; - texture = pIcons_LOD->GetTexture(v7); - v10 = texture->uTextureWidth; - if ( texture->uTextureWidth < 14 ) + + auto texture = assets->GetImage_16BitColorKey(v4->GetIconName(), 0x7FF); + //v7 = pIcons_LOD->LoadTexture(v4->GetIconName(), TEXTURE_16BIT_PALETTE); + //texture = pIcons_LOD->GetTexture(v7); + + v10 = texture->GetWidth(); + if ( texture->GetWidth() < 14 ) v10 = 14; v12 = ((v10 - 14) >> 5) + 1; - v11 = texture->uTextureHeight; - if ( texture->uTextureHeight < 14 ) + v11 = texture->GetHeight(); + if ( texture->GetHeight() < 14 ) v11 = 14; v13 = ((v11 - 14) >> 5) + 1; if ( !areWeLoadingTexture ) diff -r dd36326a9994 -r a76d408c5132 Engine/Objects/NPC.cpp --- a/Engine/Objects/NPC.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Objects/NPC.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -20,7 +20,7 @@ #include "../Graphics/Overlays.h" int pDialogueNPCCount; -std::array pDialogueNPCPortraits; +std::array pDialogueNPCPortraits; int uNumDialogueNPCPortraits; // weak struct NPCStats *pNPCStats = nullptr; diff -r dd36326a9994 -r a76d408c5132 Engine/Objects/NPC.h --- a/Engine/Objects/NPC.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Objects/NPC.h Wed Mar 09 01:39:52 2016 +0200 @@ -198,7 +198,7 @@ #pragma pack(pop) extern int pDialogueNPCCount; -extern std::array pDialogueNPCPortraits; +extern std::array pDialogueNPCPortraits; extern int uNumDialogueNPCPortraits; // weak extern struct NPCStats *pNPCStats; diff -r dd36326a9994 -r a76d408c5132 Engine/Party.cpp --- a/Engine/Party.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Party.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -37,6 +37,29 @@ +struct +{ + struct UIAnimation _pUIAnim_Food; + struct UIAnimation _pUIAnim_Gold; + struct UIAnimation _pUIAnum_Torchlight; + struct UIAnimation _pUIAnim_WizardEye; +} _uianim; + +struct UIAnimation *pUIAnim_Food = &_uianim._pUIAnim_Food; +struct UIAnimation *pUIAnim_Gold = &_uianim._pUIAnim_Gold; +struct UIAnimation *pUIAnum_Torchlight = &_uianim._pUIAnum_Torchlight; +struct UIAnimation *pUIAnim_WizardEye = &_uianim._pUIAnim_WizardEye; + +std::array pUIAnims = +{ + &_uianim._pUIAnim_Food, + &_uianim._pUIAnim_Gold, + &_uianim._pUIAnum_Torchlight, + &_uianim._pUIAnim_WizardEye +}; + + + //----- (0044A56A) -------------------------------------------------------- void Party::CountHirelings() { @@ -218,7 +241,7 @@ { pUIAnim_Food->uAnimTime = 0; pParty->uNumFoodRations = uNumFood; - pUIAnim_Food->uAnimLength = 8 * pIconsFrameTable->pIcons[pUIAnim_Food->uIconID].uAnimLength; + pUIAnim_Food->uAnimLength = pUIAnim_Food->icon->GetAnimLength(); } //----- (00492B03) -------------------------------------------------------- @@ -230,7 +253,7 @@ pParty->uNumFoodRations -= uNumFood; pUIAnim_Food->uAnimTime = 0; - pUIAnim_Food->uAnimLength = 8 * pIconsFrameTable->pIcons[pUIAnim_Food->uIconID].uAnimLength; + pUIAnim_Food->uAnimLength = pUIAnim_Food->icon->GetAnimLength(); } //----- (00492B42) -------------------------------------------------------- @@ -238,7 +261,7 @@ { pParty->uNumFoodRations += _this; pUIAnim_Food->uAnimTime = 0; - pUIAnim_Food->uAnimLength = 8 * pIconsFrameTable->pIcons[pUIAnim_Food->uIconID].uAnimLength; + pUIAnim_Food->uAnimLength = pUIAnim_Food->icon->GetAnimLength(); } //----- (00492B70) -------------------------------------------------------- @@ -246,7 +269,7 @@ { pParty->uNumGold = uNumGold; pUIAnim_Gold->uAnimTime = 0; - pUIAnim_Gold->uAnimLength = 8 * pIconsFrameTable->pIcons[pUIAnim_Gold->uIconID].uAnimLength; + pUIAnim_Gold->uAnimLength = pUIAnim_Gold->icon->GetAnimLength(); pAudioPlayer->PlaySound(SOUND_gold01, 0, 0, -1, 0, 0, 0, 0); } @@ -258,7 +281,7 @@ else pParty->uNumGold = 0; pUIAnim_Gold->uAnimTime = 0; - pUIAnim_Gold->uAnimLength = 8 * pIconsFrameTable->pIcons[pUIAnim_Gold->uIconID].uAnimLength; + pUIAnim_Gold->uAnimLength = pUIAnim_Gold->icon->GetAnimLength(); pAudioPlayer->PlaySound(SOUND_gold01, 0, 0, -1, 0, 0, 0, 0); } @@ -1015,7 +1038,7 @@ } this->uNumGold += goldToGain - hirelingSalaries; pUIAnim_Gold->uAnimTime = 0; - pUIAnim_Gold->uAnimLength = 8 * pIconsFrameTable->pIcons[(signed __int16)pUIAnim_Gold->uIconID].uAnimLength; + pUIAnim_Gold->uAnimLength = pUIAnim_Gold->icon->GetAnimLength(); if ( pTmpBuf2[0] ) ShowStatusBarString(pTmpBuf2.data(), 2u); pAudioPlayer->PlaySound(SOUND_gold01, 0, 0, -1, 0, 0, 0, 0); @@ -1023,24 +1046,26 @@ //----- (00421B2C) -------------------------------------------------------- void Party::sub_421B2C_PlaceInInventory_or_DropPickedItem() { - unsigned int v0; // eax@2 - Texture_MM7 *v1; // ebx@2 + //unsigned int v0; // eax@2 + //Texture_MM7 *v1; // ebx@2 int v2; // eax@3 int v4; // eax@6 unsigned __int16 v5; // dx@11 signed int v6; // eax@11 __int16 v8; // ax@16 SpriteObject a1; // [sp+4h] [bp-78h]@11 - int v11; // [sp+74h] [bp-8h]@2 + //int v11; // [sp+74h] [bp-8h]@2 int v12; // [sp+78h] [bp-4h]@5 if ( !pParty->pPickedItem.uItemID ) return; - v0 = pIcons_LOD->LoadTexture( - pParty->pPickedItem.GetIconName(), - TEXTURE_16BIT_PALETTE); - v1 = pIcons_LOD->GetTexture(v0); - v11 = areWeLoadingTexture; + + auto texture = assets->GetImage_16BitColorKey(pParty->pPickedItem.GetIconName(), 0x7FF); + //v0 = pIcons_LOD->LoadTexture( + // pParty->pPickedItem.GetIconName(), + // TEXTURE_16BIT_PALETTE); + //v1 = pIcons_LOD->GetTexture(v0); + //v11 = areWeLoadingTexture; if ( uActiveCharacter && (v2 = ::pPlayers[uActiveCharacter]->AddItem(-1, pParty->pPickedItem.uItemID)) != 0 ) { @@ -1091,12 +1116,12 @@ pMouse->RemoveHoldingItem(); } } - if ( !v11 ) + + if (texture) { - v1->Release(); - pIcons_LOD->SyncLoadedFilesCount(); + texture->Release(); + texture = nullptr; } - return; } @@ -1105,11 +1130,11 @@ { unsigned int v2; // eax@1 char *v5; // eax@8 - Texture_MM7 *v7; // ebx@10 + //Texture_MM7 *v7; // ebx@10 signed int v8; // esi@10 Player *v9; // edi@11 int v10; // eax@11 - int v21; // [sp+24h] [bp-4h]@10 + //int v21; // [sp+24h] [bp-4h]@10 v2 = pItem->uItemID; if ( !pItemsTable->pItems[v2].uItemID_Rep_St ) @@ -1118,8 +1143,9 @@ v5 = pItemsTable->pItems[v2].pIconName; if ( v5 ) { - v7 = pIcons_LOD->LoadTexturePtr(v5, TEXTURE_16BIT_PALETTE); - v21 = areWeLoadingTexture; + auto texture = assets->GetImage_16BitColorKey(v5, 0x7FF); + //v7 = pIcons_LOD->LoadTexturePtr(v5, TEXTURE_16BIT_PALETTE); + //v21 = areWeLoadingTexture; v8 = 0; uint current_player = uActiveCharacter; for (int i = 0; i < 4; i++) @@ -1135,28 +1161,28 @@ pItem->Reset(); pAudioPlayer->PlaySound(SOUND_gold01, 0, 0, -1, 0, 0, 0, 0); v9->PlaySound(SPEECH_60, 0); - if ( !v21 ) + + if (texture) { - v7->Release(); - pIcons_LOD->SyncLoadedFilesCount(); + texture->Release(); + texture = nullptr; } return true; } } - if ( !v21 ) + if (texture) { - v7->Release(); - pIcons_LOD->SyncLoadedFilesCount(); + texture->Release(); + texture = nullptr; } - return false; } else { MessageBoxW(nullptr, L"Invalid picture_name detected ::addItem()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Party.cpp:795", 0); - return false; } + return false; } -// 506128: using guessed type int areWeLoadingTexture; + bool Party::IsPartyEvil() { diff -r dd36326a9994 -r a76d408c5132 Engine/Registry.cpp --- a/Engine/Registry.cpp Mon Mar 07 03:48:40 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -#define _CRTDBG_MAP_ALLOC -#include -#include - -#define _CRT_SECURE_NO_WARNINGS -#include -#include -#include - -#include "Registry.h" -#include "Engine/ErrorHandling.h" - -//----- (004649EF) -------------------------------------------------------- -int __fastcall ReadWindowsRegistryInt(const char *pKey, int uDefValue) -{ - DWORD cbData; // [sp+8h] [bp-20h]@1 - LPCSTR lpValueName; // [sp+Ch] [bp-1Ch]@1 - DWORD dwDisposition; // [sp+10h] [bp-18h]@2 - BYTE Data[4]; // [sp+14h] [bp-14h]@5 - HKEY hKey; // [sp+18h] [bp-10h]@1 - HKEY phkResult; // [sp+1Ch] [bp-Ch]@1 - HKEY v10; // [sp+20h] [bp-8h]@1 - HKEY v11; // [sp+24h] [bp-4h]@1 - - lpValueName = pKey; - v11 = 0; - v10 = 0; - hKey = 0; - phkResult = 0; - cbData = 4; - if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) )// for 64 bit - { - if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) - { - if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v10, &dwDisposition) ) - { - if ( !RegCreateKeyExA(v10, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v11, &dwDisposition) ) - { - LSTATUS status; - if ( status = RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData) ) - { - status; - GetLastError(); - - *(int *)Data = uDefValue; - RegSetValueExA(v11, lpValueName, 0, 4, Data, 4); - } - RegCloseKey(v11); - } - RegCloseKey(v10); - } - RegCloseKey(phkResult); - } - RegCloseKey(hKey); - } - return *(int *)Data; -} - -//----- (00464B02) -------------------------------------------------------- -void __fastcall WriteWindowsRegistryString(const char *pKey, const char *pString) -{ - size_t v2; // eax@5 - const char *lpValueName; // [sp+4h] [bp-1Ch]@1 - const char *Str; // [sp+8h] [bp-18h]@1 - DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 - HKEY hKey; // [sp+10h] [bp-10h]@1 - HKEY phkResult; // [sp+14h] [bp-Ch]@1 - HKEY v8; // [sp+18h] [bp-8h]@1 - HKEY v9; // [sp+1Ch] [bp-4h]@1 - - Str = pString; - lpValueName = pKey; - v9 = 0; - v8 = 0; - hKey = 0; - phkResult = 0; - if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) ) - { - if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) - { - if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition) ) - { - if ( !RegCreateKeyExA(v8, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v9, &dwDisposition) ) - { - v2 = strlen(Str); - RegSetValueExA(v9, lpValueName, 0, 1, (const BYTE *)Str, v2 + 1); - RegCloseKey(v9); - } - RegCloseKey(v8); - } - RegCloseKey(phkResult); - } - RegCloseKey(hKey); - } -} - -//----- (00464BEF) -------------------------------------------------------- -void __fastcall ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue) -{ - //LSTATUS (__stdcall *v4)(HKEY); // esi@1 - LSTATUS result; // eax@7 - DWORD Type; // [sp+Ch] [bp-24h]@5 - LPCSTR lpValueName; // [sp+10h] [bp-20h]@1 - DWORD cbData; // [sp+14h] [bp-1Ch]@1 - LPBYTE Dest; // [sp+18h] [bp-18h]@1 - DWORD dwDisposition; // [sp+1Ch] [bp-14h]@2 - HKEY phkResult; // [sp+20h] [bp-10h]@1 - HKEY hKey; // [sp+24h] [bp-Ch]@1 - HKEY v13; // [sp+28h] [bp-8h]@1 - HKEY v14; // [sp+2Ch] [bp-4h]@1 - - cbData = uBufLen; - Dest = (LPBYTE)pOutString; - lpValueName = pKeyName; - v14 = 0; - v13 = 0; - hKey = 0; - phkResult = 0; - result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); - if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) ) - { - if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition)) - { - if (!RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v13, &dwDisposition)) - { - if( !RegCreateKeyExA(v13, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v14, &dwDisposition) ) - { - if ( RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData) ) - GetLastError(); - RegCloseKey(v14); - v14 = NULL; - } - RegCloseKey(v13); - v13 = NULL; - } - RegCloseKey(phkResult); - phkResult = NULL; - } - RegCloseKey(hKey); - hKey = NULL; - } -} - -//----- (00464D32) -------------------------------------------------------- -void __fastcall WriteWindowsRegistryInt(const char *pKey, int val) -{ - const char *lpValueName; // [sp+4h] [bp-1Ch]@1 - BYTE Data[4]; // [sp+8h] [bp-18h]@1 - DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 - HKEY hKey; // [sp+10h] [bp-10h]@1 - HKEY phkResult; // [sp+14h] [bp-Ch]@1 - HKEY v7; // [sp+18h] [bp-8h]@1 - HKEY v8; // [sp+1Ch] [bp-4h]@1 - - *(int *)Data = val; - lpValueName = pKey; - v8 = 0; - v7 = 0; - hKey = 0; - phkResult = 0; - if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) ) - { - if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) - { - if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v7, &dwDisposition) ) - { - if ( !RegCreateKeyExA(v7, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition) ) - { - RegSetValueExA(v8, lpValueName, 0, 4, Data, 4); - RegCloseKey(v8); - } - RegCloseKey(v7); - } - RegCloseKey(phkResult); - } - RegCloseKey(hKey); - } -} \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 Engine/Registry.h --- a/Engine/Registry.h Mon Mar 07 03:48:40 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -#pragma once - - - -int __fastcall ReadWindowsRegistryInt(const char *pKey, int uDefValue); // idb -void __fastcall WriteWindowsRegistryString(const char *pKey, const char *pString); -void __fastcall ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue); -void __fastcall WriteWindowsRegistryInt(const char *pKey, int val); \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 Engine/Serialization/LegacyImages.cpp --- a/Engine/Serialization/LegacyImages.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Serialization/LegacyImages.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -1,6 +1,8 @@ #include "Engine/Engine.h" +#include "Engine/LOD.h" #include "Engine/Timer.h" #include "Engine/Party.h" +#include "Engine/Tables/IconFrameTable.h" #include "Engine/Objects/NPC.h" #include "Engine/Graphics/Overlays.h" #include "Engine/Serialization/LegacyImages.h" @@ -83,6 +85,18 @@ memset(this, 0, sizeof(*this)); } +IconFrame_MM7::IconFrame_MM7() +{ + Assert(sizeof(*this) == 0x20); + memset(this, 0, sizeof(*this)); +} + +UIAnimation_MM7::UIAnimation_MM7() +{ + Assert(sizeof(*this) == 0xD); + memset(this, 0, sizeof(*this)); +} + @@ -942,4 +956,55 @@ player->uNumArmageddonCasts = this->uNumArmageddonCasts; player->uNumFireSpikeCasts = this->uNumFireSpikeCasts; player->field_1B3B = this->field_1B3B; +} + + + +void IconFrame_MM7::Serialize(Icon *icon) +{ + strcpy(pAnimationName, icon->GetAnimationName()); + uAnimLength = icon->GetAnimLength(); + + strcpy(pTextureName, icon->pTextureName); + uAnimTime = icon->GetAnimTime(); + uFlags = icon->uFlags; + + __debugbreak(); // impossible + //uTextureID = icon->uTextureID; +} + +void IconFrame_MM7::Deserialize(Icon *icon) +{ + icon->SetAnimationName(this->pAnimationName); + icon->SetAnimLength(8 * this->uAnimLength); + + strcpy(icon->pTextureName, pTextureName); + icon->SetAnimTime(uAnimTime); + icon->uFlags = uFlags; + icon->texture = assets->GetImage_16BitColorKey(pIcons_LOD->pTextures[uTextureID].pName, 0x7FF); +} + + + +void UIAnimation_MM7::Serialize(UIAnimation *anim) +{ + /* 000 */ uIconID = anim->icon->id; + /* 002 */ field_2 = anim->field_2; + /* 004 */ uAnimTime = anim->uAnimTime; + /* 006 */ uAnimLength = anim->uAnimLength; + /* 008 */ x = anim->x; + /* 00A */ y = anim->y; + /* 00C */ field_C = anim->field_C; +} + +void UIAnimation_MM7::Deserialize(UIAnimation *anim) +{ + anim->icon = pIconsFrameTable->GetIcon(uIconID); + ///* 000 */ anim->uIconID = uIconID; + /* 002 */ anim->field_2 = field_2; + /* 004 */ anim->uAnimTime = uAnimTime; + /* 006 */ anim->uAnimLength = uAnimLength; + /* 008 */ anim->x = x; + /* 00A */ anim->y = y; + /* 00C */ anim->field_C = field_C; } \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 Engine/Serialization/LegacyImages.h --- a/Engine/Serialization/LegacyImages.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Serialization/LegacyImages.h Wed Mar 09 01:39:52 2016 +0200 @@ -520,5 +520,46 @@ /* 3EC */ int bRedraw; /* 3F0 */ }; +#pragma pack(pop) -#pragma pack(pop) \ No newline at end of file + + + + +/* 44 */ +#pragma pack(push, 1) +struct IconFrame_MM7 +{ + IconFrame_MM7(); + + void Serialize(class Icon *); + void Deserialize(class Icon *); + + /* 000 */ char pAnimationName[12]; + /* 00C */ char pTextureName[12]; + /* 018 */ __int16 uAnimTime; + /* 01A */ __int16 uAnimLength; + /* 01C */ __int16 uFlags; // 0x01 - more icons in this animation + /* 01E */ unsigned __int16 uTextureID; +}; +#pragma pack(pop) + + +/* 76 */ +#pragma pack(push, 1) +struct UIAnimation_MM7 +{ + UIAnimation_MM7(); + + void Serialize(class UIAnimation *); + void Deserialize(class UIAnimation *); + + /* 000 */ unsigned __int16 uIconID; + /* 002 */ __int16 field_2; + /* 004 */ __int16 uAnimTime; + /* 006 */ __int16 uAnimLength; + /* 008 */ __int16 x; + /* 00A */ __int16 y; + /* 00C */ char field_C; +}; +#pragma pack(pop) diff -r dd36326a9994 -r a76d408c5132 Engine/Spells/CastSpellInfo.cpp --- a/Engine/Spells/CastSpellInfo.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Spells/CastSpellInfo.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -3084,7 +3084,7 @@ } pParty->pHirelings[achieved_awards[pCastSpell->uPlayerID_2 - 4] - 1].evt_A = 1; pParty->pHirelings[achieved_awards[pCastSpell->uPlayerID_2 - 4] - 1].evt_B = 0; - pParty->pHirelings[achieved_awards[pCastSpell->uPlayerID_2 - 4] - 1].evt_C = pIconsFrameTable->GetIconAnimLength(pIconsFrameTable->FindIcon("spell96")); + pParty->pHirelings[achieved_awards[pCastSpell->uPlayerID_2 - 4] - 1].evt_C = pIconsFrameTable->GetIcon("spell96")->GetAnimLength(); for ( uint pl_id = 0; pl_id < 4; pl_id++ ) { pParty->pPlayers[pl_id].sHealth = pParty->pPlayers[pl_id].GetMaxHealth(); diff -r dd36326a9994 -r a76d408c5132 Engine/Tables/IconFrameTable.cpp --- a/Engine/Tables/IconFrameTable.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Tables/IconFrameTable.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -5,33 +5,57 @@ #define _CRT_SECURE_NO_WARNINGS #include "Engine/Engine.h" +#include "Engine/Serialization/LegacyImages.h" #include "IconFrameTable.h" #include "../LOD.h" #include "FrameTableInc.h" + +Icon *IconFrameTable::GetIcon(unsigned int idx) +{ + if (idx < this->uNumIcons) + return &this->pIcons[idx]; + return nullptr; +} + +Icon *IconFrameTable::GetIcon(const char *pIconName) +{ + for (unsigned int i = 0; i < this->uNumIcons; i++) + { + if (!_stricmp(pIconName, this->pIcons[i].GetAnimationName())) + return &this->pIcons[i]; + } + return nullptr; +} + + + //----- (00494F3A) -------------------------------------------------------- unsigned int IconFrameTable::FindIcon(const char *pIconName) { for ( uint i = 0; i < (signed int)this->uNumIcons; i++ ) { - if ( !_stricmp(pIconName, this->pIcons[i].pAnimationName) ) + if ( !_stricmp(pIconName, this->pIcons[i].GetAnimationName()) ) return i; } return 0; } //----- (00494F70) -------------------------------------------------------- -IconFrame *IconFrameTable::GetFrame(unsigned int uIconID, unsigned int uFrameID) +Icon *IconFrameTable::GetFrame(unsigned int uIconID, unsigned int frame_time) { int v6; // edx@3 uint i; - if ( this->pIcons[uIconID].uFlags & 1 && this->pIcons[uIconID].uAnimLength != 0 ) + if ( this->pIcons[uIconID].uFlags & 1 && this->pIcons[uIconID].GetAnimLength() != 0 ) { - v6 = ((signed int)uFrameID >> 3) % (unsigned __int16)this->pIcons[uIconID].uAnimLength; - for ( i = uIconID; v6 > this->pIcons[i].uAnimTime; i++ ) - v6 -= this->pIcons[i].uAnimTime; + int t = frame_time; + + t = (t /*/ 8*/) % (unsigned __int16)this->pIcons[uIconID].GetAnimLength(); + t /= 8; + for ( i = uIconID; t > this->pIcons[i].GetAnimTime(); i++ ) + t -= this->pIcons[i].GetAnimTime(); return &this->pIcons[i]; } else @@ -45,7 +69,8 @@ { for ( uint i = uIconID; ; ++i ) { - this->pIcons[i].uTextureID = pIcons_LOD->LoadTexture(this->pIcons[i].pTextureName, TEXTURE_16BIT_PALETTE); + //this->pIcons[i].uTextureID = pIcons_LOD->LoadTexture(this->pIcons[i].pTextureName, TEXTURE_16BIT_PALETTE); + this->pIcons[i].texture = assets->GetImage_16BitColorKey(this->pIcons[i].pTextureName, 0x7FF); if ( !(this->pIcons[i].uFlags & 1) ) break; } @@ -80,14 +105,24 @@ uNumIcons = num_mm6_frames + num_mm7_frames + num_mm8_frames; Assert(uNumIcons); + Assert(!num_mm6_frames); Assert(!num_mm8_frames); - pIcons = (IconFrame *)malloc(uNumIcons * sizeof(IconFrame)); - memcpy(pIcons, (char *)data_mm7 + 4, num_mm7_frames * sizeof(IconFrame)); - memcpy(pIcons + num_mm7_frames, (char *)data_mm6 + 4, num_mm6_frames * sizeof(IconFrame)); - memcpy(pIcons + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(IconFrame)); + IconFrame_MM7 *pIcons = (IconFrame_MM7 *)malloc(uNumIcons * sizeof(IconFrame_MM7)); + memcpy(pIcons, (char *)data_mm7 + 4, num_mm7_frames * sizeof(IconFrame_MM7)); + //memcpy(pIcons + num_mm7_frames, (char *)data_mm6 + 4, num_mm6_frames * sizeof(IconFrame_MM7)); + //memcpy(pIcons + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(IconFrame_MM7)); + + this->pIcons = new Icon[uNumIcons]; + for (unsigned int i = 0; i < uNumIcons; ++i) + { + pIcons[i].Deserialize(&this->pIcons[i]); + + this->pIcons[i].id = i; + } } +/* //----- (0049509D) -------------------------------------------------------- int IconFrameTable::FromFileTxt(const char *Args) { @@ -103,7 +138,7 @@ int v11; // ecx@21 int v12; // eax@22 signed int j; // edx@25 - IconFrame *v14; // ecx@26 + IconFrame_MM7 *v14; // ecx@26 int v15; // esi@26 int k; // eax@27 signed int result; // eax@11 @@ -144,7 +179,7 @@ } this->uNumIcons = v4; v5 = malloc(32 * v4);//, "I Frames"); - this->pIcons = (IconFrame *)v5; + this->pIcons = (IconFrame_MM7 *)v5; if ( v5 ) { v6 = File; @@ -210,9 +245,11 @@ result = 0; } return result; -} +}*/ + +/* //----- (0042EB78) -------------------------------------------------------- int IconFrameTable::GetIconAnimLength(unsigned int uIconID) { return 8 * this->pIcons[uIconID].uAnimLength; -} \ No newline at end of file +}*/ \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 Engine/Tables/IconFrameTable.h --- a/Engine/Tables/IconFrameTable.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/Tables/IconFrameTable.h Wed Mar 09 01:39:52 2016 +0200 @@ -2,20 +2,36 @@ #include - - -/* 44 */ -#pragma pack(push, 1) -struct IconFrame +class Icon { - char pAnimationName[12]; - char pTextureName[12]; - __int16 uAnimTime; - __int16 uAnimLength; - __int16 uFlags; - unsigned __int16 uTextureID; + public: + inline void SetAnimationName(const char *name) { strcpy(this->anim_name, name); } + inline const char *GetAnimationName() const { return anim_name; } + + inline void SetAnimLength(unsigned int anim_length) { this->anim_length = anim_length; } + inline unsigned int GetAnimLength() const { return this->anim_length; } + + inline void SetAnimTime(unsigned int anim_time) { this->anim_time = anim_time; } + inline unsigned int GetAnimTime() const { return this->anim_time; } + + ///* 000 */ char pAnimationName[12]; + /* 00C */ char pTextureName[12]; + ///* 018 */ __int16 uAnimTime; + ///* 01A */ __int16 uAnimLength; + /* 01C */ __int16 uFlags; + class Image *texture;///* 01E */ unsigned __int16 uTextureID; + int id; + + + protected: + char anim_name[64]; + //char texture_name[64]; + //unsigned int anim_time; + unsigned int anim_length; + unsigned int anim_time; + //unsigned int flags; + //unsigned int texture_id; }; -#pragma pack(pop) /* 45 */ #pragma pack(push, 1) @@ -25,16 +41,18 @@ uNumIcons(0), pIcons(nullptr) {} + Icon *GetIcon(unsigned int idx); + Icon *GetIcon(const char *pIconName); unsigned int FindIcon(const char *pIconName); - IconFrame *GetFrame(unsigned int uIconID, unsigned int uFrameID); + Icon *GetFrame(unsigned int uIconID, unsigned int frame_time); void InitializeAnimation(unsigned int uIconID); void ToFile(); void FromFile(void *data_mm6, void *data_mm7, void *data_mm8); int FromFileTxt(const char *Args); - int GetIconAnimLength(unsigned int uIconID); + //int GetIconAnimLength(unsigned int uIconID); unsigned int uNumIcons; - struct IconFrame *pIcons; + struct Icon *pIcons; }; #pragma pack(pop) @@ -49,20 +67,18 @@ -/* 76 */ -#pragma pack(push, 1) -struct UIAnimation +class UIAnimation { - unsigned __int16 uIconID; - __int16 field_2; - __int16 uAnimTime; - __int16 uAnimLength; - __int16 x; - __int16 y; - char field_C; + public: + class Icon *icon; + + /* 002 */ __int16 field_2; + /* 004 */ __int16 uAnimTime; + /* 006 */ __int16 uAnimLength; + /* 008 */ __int16 x; + /* 00A */ __int16 y; + /* 00C */ char field_C; }; -#pragma pack(pop) - @@ -71,9 +87,9 @@ extern struct IconFrameTable *pIconsFrameTable; -extern struct UIAnimation *pUIAnim_Food; -extern struct UIAnimation *pUIAnim_Gold; -extern struct UIAnimation *pUIAnum_Torchlight; -extern struct UIAnimation *pUIAnim_WizardEye; +extern class UIAnimation *pUIAnim_Food; +extern class UIAnimation *pUIAnim_Gold; +extern class UIAnimation *pUIAnum_Torchlight; +extern class UIAnimation *pUIAnim_WizardEye; -extern std::array pUIAnims; +extern std::array pUIAnims; diff -r dd36326a9994 -r a76d408c5132 Engine/TurnEngine/TurnEngine.cpp --- a/Engine/TurnEngine/TurnEngine.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/TurnEngine/TurnEngine.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -124,7 +124,7 @@ pAudioPlayer->StopChannels(-1, -1); pAudioPlayer->PlaySound(SOUND_batllest, 0, 0, -1, 0, 0, 0, 0); //pPlayer = pParty->pPlayers.data(); - dword_50C998_turnbased_icon_1A = 8 * pIconsFrameTable->pIcons[uIconID_TurnStart].uAnimLength; + dword_50C998_turnbased_icon_1A = pIconsFrameTable->GetIcon(uIconID_TurnStart)->GetAnimLength(); dword_50C994 = 0; this->turn_initiative = 100; diff -r dd36326a9994 -r a76d408c5132 Engine/mm7_data.cpp --- a/Engine/mm7_data.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/mm7_data.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -235,27 +235,6 @@ #include "Engine/Tables/IconFrameTable.h" struct IconFrameTable *pIconsFrameTable; -struct -{ - struct UIAnimation _pUIAnim_Food; - struct UIAnimation _pUIAnim_Gold; - struct UIAnimation _pUIAnum_Torchlight; - struct UIAnimation _pUIAnim_WizardEye; -} _uianim; - -struct UIAnimation *pUIAnim_Food = &_uianim._pUIAnim_Food; -struct UIAnimation *pUIAnim_Gold = &_uianim._pUIAnim_Gold; -struct UIAnimation *pUIAnum_Torchlight = &_uianim._pUIAnum_Torchlight; -struct UIAnimation *pUIAnim_WizardEye = &_uianim._pUIAnim_WizardEye; - -std::array pUIAnims = -{ - &_uianim._pUIAnim_Food, - &_uianim._pUIAnim_Gold, - &_uianim._pUIAnum_Torchlight, - &_uianim._pUIAnim_WizardEye -}; - #include "Engine/Tables/PlayerFrameTable.h" @@ -767,10 +746,6 @@ char bFlashHistoryBook; // weak char bFlashAutonotesBook; // weak char bFlashQuestBook; // weak -int uTextureID_PlayerBuff_PainReflection; // weak -int uTextureID_PlayerBuff_Hammerhands; // weak -int uTextureID_PlayerBuff_Preservation; // weak -int uTextureID_PlayerBuff_Bless; // weak struct GUIButton *pBtn_ZoomOut; // idb struct GUIButton *pBtn_ZoomIn; // idb unsigned int uGameUIFontShadow; @@ -1023,9 +998,6 @@ int uPlayerCreationUI_ArrowAnim; unsigned int uPlayerCreationUI_SelectedCharacter; int dword_A74CDC; // weak -struct Texture_MM7 *pTexture_PlayerFaceEradicated; -struct Texture_MM7 *pTexture_PlayerFaceDead; -std::array< std::array, 4> pTextures_PlayerFaces; __int64 _A750D8_player_speech_timer; // qword_A750D8 enum PlayerSpeech PlayerSpeechID; int uSpeakingCharacter; // weak @@ -1037,7 +1009,6 @@ //int dword_F8B144; // nexindex [-1] to the following std::array player_levels = {{1, 1, 1, 1}}; std::array<__int16, 6> weapons_Ypos; // word_F8B158 -std::array ItemsInShopTexture; __int16 bountyHunting_monster_id_for_hunting; // word_F8B1A0 const char *bountyHunting_text; // word_F8B1A4 int contract_approved; // weak diff -r dd36326a9994 -r a76d408c5132 Engine/mm7_data.h --- a/Engine/mm7_data.h Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/mm7_data.h Wed Mar 09 01:39:52 2016 +0200 @@ -437,10 +437,6 @@ extern char bFlashHistoryBook; // weak extern char bFlashAutonotesBook; // weak extern char bFlashQuestBook; // weak -extern int uTextureID_PlayerBuff_PainReflection; // weak -extern int uTextureID_PlayerBuff_Hammerhands; // weak -extern int uTextureID_PlayerBuff_Preservation; // weak -extern int uTextureID_PlayerBuff_Bless; // weak extern struct GUIButton *pBtn_ZoomOut; // idb extern struct GUIButton *pBtn_ZoomIn; // idb extern unsigned int uGameUIFontShadow; @@ -717,9 +713,6 @@ extern int uPlayerCreationUI_ArrowAnim; extern unsigned int uPlayerCreationUI_SelectedCharacter; extern int dword_A74CDC; // weak -extern struct Texture_MM7 *pTexture_PlayerFaceEradicated; -extern struct Texture_MM7 *pTexture_PlayerFaceDead; -extern std::array< std::array, 4> pTextures_PlayerFaces; extern __int64 _A750D8_player_speech_timer; // qword_A750D8 extern enum PlayerSpeech PlayerSpeechID; extern int uSpeakingCharacter; // weak @@ -730,7 +723,6 @@ extern std::array dword_F1B430; // weak extern std::array player_levels; extern std::array<__int16, 6> weapons_Ypos; // word_F8B158 -extern std::array ItemsInShopTexture; extern __int16 bountyHunting_monster_id_for_hunting; // weak extern const char *bountyHunting_text; // idb extern int contract_approved; // weak diff -r dd36326a9994 -r a76d408c5132 Engine/stru6.cpp --- a/Engine/stru6.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Engine/stru6.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -1236,7 +1236,7 @@ v4->uSpellIconID = pIconsFrameTable->FindIcon(v6); if (v4->bRender) - v4->uSpellAnimTime = 8 * pIconsFrameTable->pIcons[v4->uSpellIconID].uAnimLength; + v4->uSpellAnimTime = pIconsFrameTable->GetIcon(v4->uSpellIconID)->GetAnimLength(); } //----- (004A8BDF) -------------------------------------------------------- @@ -1376,8 +1376,8 @@ continue; } - IconFrame* icon = pIconsFrameTable->GetFrame(buff->uSpellIconID, buff->uSpellAnimTimeElapsed); - pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 385, pIcons_LOD->GetTexture(icon->uTextureID)); + Icon* icon = pIconsFrameTable->GetFrame(buff->uSpellIconID, buff->uSpellAnimTimeElapsed); + pRenderer->DrawTextureAlphaNew(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]/640.0f, 385/480.0f, icon->texture); pOtherOverlayList->bRedraw = true; } diff -r dd36326a9994 -r a76d408c5132 GUI/GUIProgressBar.cpp --- a/GUI/GUIProgressBar.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/GUIProgressBar.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -85,16 +85,21 @@ uWidth = 449; uHeight = 56; uProgressMax = 26; - pIcons_LOD->_410522(&pLoadingProgress, "loadprog", 2u); + + //pIcons_LOD->PlacementLoadTexture(&pLoadingProgress, "loadprog", 2u); + progressbar_loading = assets->GetImage_16BitColorKey("loadprog", 0x7FF); Draw(); return true; } switch (pParty->alignment) { - case PartyAlignment_Good: pIcons_LOD->_410522(&pBardata, "bardata-b", 2); break; - case PartyAlignment_Neutral: pIcons_LOD->_410522(&pBardata, "bardata", 2); break; - case PartyAlignment_Evil: pIcons_LOD->_410522(&pBardata, "bardata-c", 2); break; + case PartyAlignment_Good: progressbar_dungeon = assets->GetImage_16BitColorKey("bardata-b", 0x7FF); break; + case PartyAlignment_Neutral: progressbar_dungeon = assets->GetImage_16BitColorKey("bardata", 0x7FF); break; + case PartyAlignment_Evil: progressbar_dungeon = assets->GetImage_16BitColorKey("bardata-c", 0x7FF); break; + //case PartyAlignment_Good: pIcons_LOD->PlacementLoadTexture(&pBardata, "bardata-b", 2); break; + //case PartyAlignment_Neutral: pIcons_LOD->PlacementLoadTexture(&pBardata, "bardata", 2); break; + //case PartyAlignment_Evil: pIcons_LOD->PlacementLoadTexture(&pBardata, "bardata-c", 2); break; default: Error("Invalid alignment type: %u", pParty->alignment); } @@ -139,21 +144,33 @@ this->uProgressCurrent = this->uProgressMax - 1; Progress(); } - v3 = (int)&this->pLoadingProgress.paletted_pixels; - free(this->pLoadingProgress.paletted_pixels); - free(this->pLoadingProgress.pPalette16); - this->pLoadingProgress.pPalette16 = 0; + + if (progressbar_loading) + { + progressbar_loading->Release(); + progressbar_loading = nullptr; + } + //v3 = (int)&this->pLoadingProgress.paletted_pixels; + //free(this->pLoadingProgress.paletted_pixels); + //free(this->pLoadingProgress.pPalette16); + //this->pLoadingProgress.pPalette16 = 0; + //*(int *)v3 = 0; } else { - if ( !this->pBardata.paletted_pixels) - return; - free(this->pBardata.paletted_pixels); - v3 = (int)&this->pBardata.pPalette16; - free(this->pBardata.pPalette16); - this->pBardata.paletted_pixels = 0; + //if ( !this->pBardata.paletted_pixels) + // return; + //free(this->pBardata.paletted_pixels); + //v3 = (int)&this->pBardata.pPalette16; + //free(this->pBardata.pPalette16); + //this->pBardata.paletted_pixels = 0; + //*(int *)v3 = 0; + if (progressbar_dungeon) + { + progressbar_dungeon->Release(); + progressbar_dungeon = nullptr; + } } - *(int *)v3 = 0; } //----- (00443670) -------------------------------------------------------- @@ -162,12 +179,12 @@ pRenderer->BeginScene(); if (uType != TYPE_Fullscreen) { - if (pBardata.paletted_pixels) + //if (pBardata.paletted_pixels) { pRenderer->Sub01(); - pRenderer->DrawTextureTransparentColorKey(80, 122, &pBardata);//прогрессбар для данжей - pRenderer->DrawTextureIndexedAlpha(100, 146, &pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(uIconID_TurnHour, 0)->uTextureID]); + pRenderer->DrawTextureAlphaNew(80/640.0f, 122/480.0f, progressbar_dungeon); + pRenderer->DrawTextureAlphaNew(100/640.0f, 146/480.0f, pIconsFrameTable->GetFrame(uIconID_TurnHour, 0)->texture); //pRenderer->FillRectFast(174, 164, floorf(((double)(113 * uProgressCurrent) / (double)uProgressMax) + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15), //16, pRenderer->uTargetRMask); pRenderer->FillRectFast(174, 164, floorf(((double)(113 * uProgressCurrent) / (double)uProgressMax) + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15), @@ -187,11 +204,10 @@ } else { - 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->DrawTextureAlphaNew(172/640.0f, 459/480.0f, progressbar_loading); pRenderer->ResetUIClipRect(); pRenderer->EndScene(); pRenderer->Present(); diff -r dd36326a9994 -r a76d408c5132 GUI/GUIProgressBar.h --- a/GUI/GUIProgressBar.h Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/GUIProgressBar.h Wed Mar 09 01:39:52 2016 +0200 @@ -42,8 +42,8 @@ //RGBTexture field_90; //RGBTexture field_B8; struct Texture_MM7 field_E0; - struct Texture_MM7 pBardata; - struct Texture_MM7 pLoadingProgress; + class Image *progressbar_dungeon;//struct Texture_MM7 pBardata; + class Image *progressbar_loading;//struct Texture_MM7 pLoadingProgress; inline GUIProgressBar(): diff -r dd36326a9994 -r a76d408c5132 GUI/GUIWindow.cpp --- a/GUI/GUIWindow.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/GUIWindow.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -419,7 +419,13 @@ // ----------------------------------------- // 0041C26A void GUIWindow::Release --- part if (!dword_591084) - pDialogueNPCPortraits[0]->Release(); + { + if (pDialogueNPCPortraits[0]) + { + pDialogueNPCPortraits[0]->Release(); + pDialogueNPCPortraits[0] = nullptr; + } + } uNumDialogueNPCPortraits = 0; if (game_ui_dialogue_background) @@ -449,7 +455,13 @@ // ----------------------------------------- // 0041C26A void GUIWindow::Release --- part for (int i = 0; i < uNumDialogueNPCPortraits; ++i) - pDialogueNPCPortraits[i]->Release(); + { + if (pDialogueNPCPortraits[i]) + { + pDialogueNPCPortraits[i]->Release(); + pDialogueNPCPortraits[i] = nullptr; + } + } uNumDialogueNPCPortraits = 0; if (game_ui_dialogue_background) @@ -685,8 +697,8 @@ { pRenderer->DrawTextureAlphaNew((pNPCPortraits_x[uNumDialogueNPCPortraits - 1][v8] - 4)/640.0f, (pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v8] - 4)/480.0f, game_ui_evtnpc); - pRenderer->DrawTextureTransparentColorKey(pNPCPortraits_x[uNumDialogueNPCPortraits - 1][v8], - pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v8], pDialogueNPCPortraits[v8]); + pRenderer->DrawTextureAlphaNew(pNPCPortraits_x[uNumDialogueNPCPortraits - 1][v8]/640.0f, + pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v8]/480.0f, pDialogueNPCPortraits[v8]); if ( uNumDialogueNPCPortraits < 4 ) { if ( v8 + 1 == uNumDialogueNPCPortraits && uHouse_ExitPic ) @@ -703,7 +715,7 @@ continue; } pTitleText = HouseNPCData[v8 +1 - (dword_591080 != 0)]->pName; - v9 = pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v8] + pDialogueNPCPortraits[v8]->uTextureHeight + 2; + v9 = pNPCPortraits_y[uNumDialogueNPCPortraits - 1][v8] + pDialogueNPCPortraits[v8]->GetHeight() + 2; } v10 = v9; pWindow.DrawTitleText(pFontCreate, 483, v10, pColor2, pTitleText, 3); @@ -720,7 +732,7 @@ } v4 = (char *)pDialogueNPCCount - 1; pRenderer->DrawTextureAlphaNew((pNPCPortraits_x[0][0] - 4)/640.0f, (pNPCPortraits_y[0][0] - 4)/480.0f, game_ui_evtnpc); - pRenderer->DrawTextureTransparentColorKey(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pDialogueNPCPortraits[(signed int)v4]); + pRenderer->DrawTextureAlphaNew(pNPCPortraits_x[0][0]/640.0f, pNPCPortraits_y[0][0]/480.0f, pDialogueNPCPortraits[(signed int)v4]); if ( current_screen_type == SCREEN_E ) { CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true); @@ -1738,21 +1750,22 @@ ui_btn_npc_right = assets->GetImage_16BitAlpha(L"IB-NPCRD-C"); game_ui_btn_zoomin = assets->GetImage_16BitAlpha("ib-autout-C"); game_ui_btn_zoomout = assets->GetImage_16BitAlpha("ib-autin-C"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_GameUI_CharSelectionFrame], "IB-selec-C", 2); + game_ui_player_selection_frame = assets->GetImage_16BitColorKey("IB-selec-C", 0x7FF); game_ui_btn_cast = assets->GetImage_16BitAlpha("ib-m1d-c"); game_ui_btn_rest = assets->GetImage_16BitAlpha("ib-m2d-c"); game_ui_btn_quickref = assets->GetImage_16BitAlpha("ib-m3d-c"); game_ui_btn_settings = assets->GetImage_16BitAlpha("ib-m4d-c"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Bless], "isg-01-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Preservation], "isg-02-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Hammerhands], "isg-03-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_PainReflection], "isg-04-c", 2); + game_ui_playerbuff_bless = assets->GetImage_16BitColorKey("isg-01-c", 0x7FF); + game_ui_playerbuff_preservation = assets->GetImage_16BitColorKey("isg-02-c", 0x7FF); + game_ui_playerbuff_hammerhands = assets->GetImage_16BitColorKey("isg-03-c", 0x7FF); + game_ui_playerbuff_pain_reflection = assets->GetImage_16BitColorKey("isg-04-c", 0x7FF); - pUIAnim_WizardEye->uIconID = pIconsFrameTable->FindIcon("wizeyeC"); - pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->uIconID); - pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchC"); - pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->uIconID); + pUIAnim_WizardEye->icon = pIconsFrameTable->GetIcon("wizeyeC"); + pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->icon->id); + + pUIAnum_Torchlight->icon = pIconsFrameTable->GetIcon("torchC"); + pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->icon->id); ui_exit_cancel_button_background = assets->GetImage_16BitColorKey(L"ib-bcu-c", 0x7FF); @@ -1787,23 +1800,26 @@ ui_btn_npc_right = assets->GetImage_16BitAlpha(L"IB-NPCRD-C"); game_ui_btn_zoomin = assets->GetImage_16BitAlpha(L"ib-autout-C"); game_ui_btn_zoomout = assets->GetImage_16BitAlpha(L"ib-autin-C"); - uTextureID_GameUI_CharSelectionFrame = pIcons_LOD->LoadTexture("IB-selec-C", TEXTURE_16BIT_PALETTE); + game_ui_player_selection_frame = assets->GetImage_16BitColorKey("IB-selec-C", 0x7FF); game_ui_btn_cast = assets->GetImage_16BitAlpha(L"ib-m1d-c"); game_ui_btn_rest = assets->GetImage_16BitAlpha("ib-m2d-c"); game_ui_btn_quickref = assets->GetImage_16BitAlpha("ib-m3d-c"); game_ui_btn_settings = assets->GetImage_16BitAlpha("ib-m4d-c"); ui_exit_cancel_button_background = assets->GetImage_16BitColorKey(L"ib-bcu-c", 0x7FF); - uTextureID_PlayerBuff_Bless = pIcons_LOD->LoadTexture("isg-01-c", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_Preservation = pIcons_LOD->LoadTexture("isg-02-c", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_Hammerhands = pIcons_LOD->LoadTexture("isg-03-c", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_PainReflection = pIcons_LOD->LoadTexture("isg-04-c", TEXTURE_16BIT_PALETTE); + game_ui_playerbuff_bless = assets->GetImage_16BitColorKey("isg-01-c", 0x7FF); + game_ui_playerbuff_preservation = assets->GetImage_16BitColorKey("isg-02-c", 0x7FF); + game_ui_playerbuff_hammerhands = assets->GetImage_16BitColorKey("isg-03-c", 0x7FF); + game_ui_playerbuff_pain_reflection = assets->GetImage_16BitColorKey("isg-04-c", 0x7FF); + game_ui_evtnpc = assets->GetImage_16BitColorKey(L"evtnpc-c", 0x7FF); ui_character_inventory_background = assets->GetImage_16BitColorKey(L"fr_inven", 0x7FF); - pUIAnim_WizardEye->uIconID = pIconsFrameTable->FindIcon("wizeyeC"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnim_WizardEye->uIconID); - pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchC"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnum_Torchlight->uIconID); + + pUIAnim_WizardEye->icon = pIconsFrameTable->GetIcon("wizeyeC"); + pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->icon->id); + + pUIAnum_Torchlight->icon = pIconsFrameTable->GetIcon("torchC"); + pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->icon->id); } uGameUIFontMain = Color16(0xC8u, 0, 0); uGameUIFontShadow = Color16(10, 0, 0); @@ -1829,19 +1845,21 @@ ui_btn_npc_right = assets->GetImage_16BitAlpha(L"IB-NPCRD-a"); game_ui_btn_zoomin = assets->GetImage_16BitAlpha("ib-autout-a"); game_ui_btn_zoomout = assets->GetImage_16BitAlpha("ib-autin-a"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_GameUI_CharSelectionFrame], "IB-selec-a", 2); + game_ui_player_selection_frame = assets->GetImage_16BitColorKey("IB-selec-a", 0x7FF); game_ui_btn_cast = assets->GetImage_16BitAlpha("ib-m1d-a"); game_ui_btn_rest = assets->GetImage_16BitAlpha("ib-m2d-a"); game_ui_btn_quickref = assets->GetImage_16BitAlpha("ib-m3d-a"); game_ui_btn_settings = assets->GetImage_16BitAlpha("ib-m4d-a"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Bless], "isg-01-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Preservation], "isg-02-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Hammerhands], "isg-03-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_PainReflection], "isg-04-a", 2); - pUIAnim_WizardEye->uIconID = pIconsFrameTable->FindIcon("wizeyeA"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnim_WizardEye->uIconID); - pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchA"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnum_Torchlight->uIconID); + + game_ui_playerbuff_bless = assets->GetImage_16BitColorKey("isg-01-a", 0x7FF); + game_ui_playerbuff_preservation = assets->GetImage_16BitColorKey("isg-02-a", 0x7FF); + game_ui_playerbuff_hammerhands = assets->GetImage_16BitColorKey("isg-03-a", 0x7FF); + game_ui_playerbuff_pain_reflection = assets->GetImage_16BitColorKey("isg-04-a", 0x7FF); + + pUIAnim_WizardEye->icon = pIconsFrameTable->GetIcon("wizeyeA"); + pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->icon->id); + pUIAnum_Torchlight->icon = pIconsFrameTable->GetIcon("torchA"); + pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->icon->id); ui_exit_cancel_button_background = assets->GetImage_16BitColorKey(L"ib-bcu-a", 0x7FF); @@ -1874,7 +1892,7 @@ ui_btn_npc_left = assets->GetImage_16BitAlpha(L"IB-NPCLD-A"); ui_btn_npc_right = assets->GetImage_16BitAlpha(L"IB-NPCRD-A"); - uTextureID_GameUI_CharSelectionFrame = pIcons_LOD->LoadTexture("IB-selec-A", TEXTURE_16BIT_PALETTE); + game_ui_player_selection_frame = assets->GetImage_16BitColorKey("IB-selec-A", 0x7FF); game_ui_btn_cast = assets->GetImage_16BitAlpha("ib-m1d-a"); game_ui_btn_rest = assets->GetImage_16BitAlpha("ib-m2d-a"); game_ui_btn_quickref = assets->GetImage_16BitAlpha("ib-m3d-a"); @@ -1883,16 +1901,19 @@ game_ui_btn_zoomout = assets->GetImage_16BitAlpha("ib-autin-a"); ui_exit_cancel_button_background = assets->GetImage_16BitColorKey(L"ib-bcu-a", 0x7FF); - uTextureID_PlayerBuff_Bless = pIcons_LOD->LoadTexture("isg-01-a", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_Preservation = pIcons_LOD->LoadTexture("isg-02-a", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_Hammerhands = pIcons_LOD->LoadTexture("isg-03-a", TEXTURE_16BIT_PALETTE); - uTextureID_PlayerBuff_PainReflection = pIcons_LOD->LoadTexture("isg-04-a", TEXTURE_16BIT_PALETTE); + game_ui_playerbuff_bless = assets->GetImage_16BitColorKey("isg-01-a", 0x7FF); + game_ui_playerbuff_preservation = assets->GetImage_16BitColorKey("isg-02-a", 0x7FF); + game_ui_playerbuff_hammerhands = assets->GetImage_16BitColorKey("isg-03-a", 0x7FF); + game_ui_playerbuff_pain_reflection = assets->GetImage_16BitColorKey("isg-04-a", 0x7FF); + game_ui_evtnpc = assets->GetImage_16BitColorKey(L"evtnpc", 0x7FF); ui_character_inventory_background = assets->GetImage_16BitColorKey(L"fr_inven", 0x7FF); - pUIAnim_WizardEye->uIconID = pIconsFrameTable->FindIcon("wizeyeA"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnim_WizardEye->uIconID); - pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchA"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnum_Torchlight->uIconID); + + pUIAnim_WizardEye->icon = pIconsFrameTable->GetIcon("wizeyeA"); + pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->icon->id); + pUIAnum_Torchlight->icon = pIconsFrameTable->GetIcon("torchA"); + pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->icon->id); + 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"); @@ -1927,21 +1948,23 @@ ui_btn_npc_right = assets->GetImage_16BitAlpha(L"IB-NPCRD-B"); game_ui_btn_zoomin = assets->GetImage_16BitAlpha("ib-autout-B"); game_ui_btn_zoomout = assets->GetImage_16BitAlpha("ib-autin-B"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_GameUI_CharSelectionFrame], "IB-selec-B", 2); + game_ui_player_selection_frame = assets->GetImage_16BitColorKey("IB-selec-B", 0x7FF); game_ui_btn_cast = assets->GetImage_16BitAlpha("ib-m1d-b"); game_ui_btn_rest = assets->GetImage_16BitAlpha("ib-m2d-b"); game_ui_btn_quickref = assets->GetImage_16BitAlpha("ib-m3d-b"); game_ui_btn_settings = assets->GetImage_16BitAlpha("ib-m4d-b"); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Bless], "isg-01-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Preservation], "isg-02-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_Hammerhands], "isg-03-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_PlayerBuff_PainReflection], "isg-04-b", 2); - pUIAnim_WizardEye->uIconID = pIconsFrameTable->FindIcon("wizeyeB"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnim_WizardEye->uIconID); - pUIAnum_Torchlight->uIconID = pIconsFrameTable->FindIcon("torchB"); - pIconsFrameTable->InitializeAnimation((signed __int16)pUIAnum_Torchlight->uIconID); + + game_ui_playerbuff_bless = assets->GetImage_16BitColorKey("isg-01-b", 0x7FF); + game_ui_playerbuff_preservation = assets->GetImage_16BitColorKey("isg-02-b", 0x7FF); + game_ui_playerbuff_hammerhands = assets->GetImage_16BitColorKey("isg-03-b", 0x7FF); + game_ui_playerbuff_pain_reflection = assets->GetImage_16BitColorKey("isg-04-b", 0x7FF); + + pUIAnim_WizardEye->icon = pIconsFrameTable->GetIcon("wizeyeB"); + pIconsFrameTable->InitializeAnimation(pUIAnim_WizardEye->icon->id); + pUIAnum_Torchlight->icon = pIconsFrameTable->GetIcon("torchB"); + pIconsFrameTable->InitializeAnimation(pUIAnum_Torchlight->icon->id); + ui_exit_cancel_button_background = assets->GetImage_16BitColorKey(L"ib-bcu-b", 0x7FF); - game_ui_evtnpc = assets->GetImage_16BitColorKey(L"evtnpc-b", 0x7FF); ui_character_inventory_background = assets->GetImage_16BitColorKey(L"fr_inven-b", 0x7FF); messagebox_corner_y = assets->GetImage_16BitAlpha(L"cornr_ll-b"); diff -r dd36326a9994 -r a76d408c5132 GUI/GUIWindow.h --- a/GUI/GUIWindow.h Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/GUIWindow.h Wed Mar 09 01:39:52 2016 +0200 @@ -867,8 +867,6 @@ extern std::array pCreationUI_BtnPressLeft; extern std::array pCreationUI_BtnPressRight; -extern int uTextureID_GameUI_CharSelectionFrame; // 50C98C - extern unsigned int ui_mainmenu_copyright_color; extern unsigned int ui_character_tooltip_header_default_color; extern unsigned int ui_character_default_text_color; diff -r dd36326a9994 -r a76d408c5132 GUI/UI/Chest.cpp --- a/GUI/UI/Chest.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/Chest.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -57,10 +57,10 @@ auto uChestID = (unsigned int)ptr_1C; int chestBitmapId; // eax@1 - unsigned int v5; // eax@1 + //Image *v5; // eax@1 int chest_item_index; // ecx@3 - unsigned int item_texture_id; // eax@4 - Texture_MM7 *item_texture; // esi@4 + //unsigned int item_texture_id; // eax@4 + //Texture_MM7 *item_texture; // esi@4 signed int itemPixelWidth; // ecx@4 signed int itemPixelHeght; // edx@4 // signed int v11; // eax@4 @@ -84,20 +84,26 @@ chestWidthCells = pChestWidthsByType[chestBitmapId]; chestHeghtCells = pChestHeightsByType[chestBitmapId]; sprintfex(pTmpBuf.data(), "chest%02d", pChestList->pChests[chestBitmapId].uTextureID); - v5 = pIcons_LOD->LoadTexture(pTmpBuf.data(), TEXTURE_16BIT_PALETTE); - pRenderer->DrawTextureTransparentColorKey(8u, 8u, pIcons_LOD->GetTexture(v5)); + + //v5 = pIcons_LOD->LoadTexture(pTmpBuf.data(), TEXTURE_16BIT_PALETTE); + auto chest_background = assets->GetImage_16BitColorKey(pTmpBuf.data(), 0x7FF); + pRenderer->DrawTextureAlphaNew(8/640.0f, 8/480.0f, chest_background); for (item_counter = 0; item_counter < chestWidthCells * chestHeghtCells; ++item_counter) { chest_item_index = pChests[uChestID].pInventoryIndices[item_counter]; if (chest_item_index > 0) { - item_texture_id = pIcons_LOD->LoadTexture( - //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName, - pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE); - item_texture = pIcons_LOD->GetTexture(item_texture_id); - itemPixelWidth = item_texture->uTextureWidth; - itemPixelHeght = item_texture->uTextureHeight; + //item_texture_id = pIcons_LOD->LoadTexture( + // //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName, + // pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE); + //item_texture = pIcons_LOD->GetTexture(item_texture_id); + //itemPixelWidth = item_texture->uTextureWidth; + //itemPixelHeght = item_texture->uTextureHeight; + auto item_texture = assets->GetImage_16BitColorKey(pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), 0x7FF); + itemPixelWidth = item_texture->GetWidth(); + itemPixelHeght = item_texture->GetHeight(); + if (itemPixelWidth < 14) itemPixelWidth = 14; v12 = itemPixelWidth - 14; @@ -107,9 +113,9 @@ itemPixelHeght = 14; itemPixelPosX = chest_offs_x + 32 * (item_counter % chestWidthCells) + ((signed int)(v13 - itemPixelWidth) / 2); itemPixelPosY = chest_offs_y + 32 * (item_counter / chestHeghtCells) + - ((signed int)(((itemPixelHeght - 14) & 0xFFFFFFE0) + 32 - item_texture->uTextureHeight) / 2); - pRenderer->DrawTextureIndexedAlpha(itemPixelPosX, itemPixelPosY, item_texture); - ZBuffer_DoFill2(&v16[itemPixelPosX + pSRZBufferLineOffsets[itemPixelPosY]], item_texture, item_counter + 1); + ((signed int)(((itemPixelHeght - 14) & 0xFFFFFFE0) + 32 - item_texture->GetHeight()) / 2); + pRenderer->DrawTextureAlphaNew(itemPixelPosX/640.0f, itemPixelPosY/480.0f, item_texture); + //ZBuffer_DoFill2(&v16[itemPixelPosX + pSRZBufferLineOffsets[itemPixelPosY]], item_texture, item_counter + 1); } } pRenderer->DrawTextureAlphaNew(pBtn_ExitCancel->uX/640.0f, pBtn_ExitCancel->uY/480.0f, ui_exit_cancel_button_background); diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIArena.cpp --- a/GUI/UI/UIArena.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIArena.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -165,7 +165,6 @@ pViewport->uViewportBR_Y - pViewport->uViewportTL_Y + 1, 0x7FF); - //Texture_MM7* pTex = pIcons_LOD->GetTexture(ui_leather_mm7); pRenderer->DrawTextureCustomHeight( 8/640.0f, (352 - v0)/480.0f, diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UICharacter.cpp --- a/GUI/UI/UICharacter.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UICharacter.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -533,10 +533,11 @@ CharacterUI_ReleaseButtons(); ReleaseAwardsScrollBar(); CharacterUI_StatsTab_Draw(player); - pRenderer->DrawTextureTransparentColorKey( - pCharacterScreen_StatsBtn->uX, - pCharacterScreen_StatsBtn->uY, - pIcons_LOD->LoadTexturePtr("ib-cd1-d", TEXTURE_16BIT_PALETTE) + pRenderer->DrawTextureAlphaNew( + pCharacterScreen_StatsBtn->uX/640.0f, + pCharacterScreen_StatsBtn->uY/480.0f, + //pIcons_LOD->LoadTexturePtr("ib-cd1-d", TEXTURE_16BIT_PALETTE) + assets->GetImage_16BitColorKey("ib-cd1-d", 0x7FF) ); } break; @@ -550,10 +551,11 @@ } ReleaseAwardsScrollBar(); CharacterUI_SkillsTab_Draw(player); - pRenderer->DrawTextureTransparentColorKey( - pCharacterScreen_SkillsBtn->uX, - pCharacterScreen_SkillsBtn->uY, - pIcons_LOD->LoadTexturePtr("ib-cd2-d", TEXTURE_16BIT_PALETTE) + pRenderer->DrawTextureAlphaNew( + pCharacterScreen_SkillsBtn->uX/640.0f, + pCharacterScreen_SkillsBtn->uY/480.0f, + //pIcons_LOD->LoadTexturePtr("ib-cd2-d", TEXTURE_16BIT_PALETTE) + assets->GetImage_16BitColorKey("ib-cd2-d", 0x7FF) ); } break; @@ -564,10 +566,11 @@ ReleaseAwardsScrollBar(); CreateAwardsScrollBar(); CharacterUI_AwardsTab_Draw(player); - pRenderer->DrawTextureTransparentColorKey( - pCharacterScreen_AwardsBtn->uX, - pCharacterScreen_AwardsBtn->uY, - pIcons_LOD->LoadTexturePtr("ib-cd4-d", TEXTURE_16BIT_PALETTE) + pRenderer->DrawTextureAlphaNew( + pCharacterScreen_AwardsBtn->uX/640.0f, + pCharacterScreen_AwardsBtn->uY/480.0f, + //pIcons_LOD->LoadTexturePtr("ib-cd4-d", TEXTURE_16BIT_PALETTE) + assets->GetImage_16BitColorKey("ib-cd4-d", 0x7FF) ); } break; @@ -577,10 +580,11 @@ CharacterUI_ReleaseButtons(); ReleaseAwardsScrollBar(); CharacterUI_InventoryTab_Draw(player, false); - pRenderer->DrawTextureTransparentColorKey( - pCharacterScreen_InventoryBtn->uX, - pCharacterScreen_InventoryBtn->uY, - pIcons_LOD->LoadTexturePtr("ib-cd3-d", TEXTURE_16BIT_PALETTE) + pRenderer->DrawTextureAlphaNew( + pCharacterScreen_InventoryBtn->uX/640.0f, + pCharacterScreen_InventoryBtn->uY/480.0f, + //pIcons_LOD->LoadTexturePtr("ib-cd3-d", TEXTURE_16BIT_PALETTE) + assets->GetImage_16BitColorKey("ib-cd3-d", 0x7FF) ); } break; diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIGame.h --- a/GUI/UI/UIGame.h Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIGame.h Wed Mar 09 01:39:52 2016 +0200 @@ -62,15 +62,6 @@ extern class Image *game_ui_monster_hp_border_left; extern class Image *game_ui_monster_hp_border_right; -extern class Image *game_ui_bar_red; -extern class Image *game_ui_bar_yellow; -extern class Image *game_ui_bar_green; -extern class Image *game_ui_bar_blue; - -extern class Image *game_ui_player_alert_yellow; // 5079C8 -extern class Image *game_ui_player_alert_red; // 5079CC -extern class Image *game_ui_player_alert_green; // 5079D0 - extern class Image *game_ui_minimap_frame; // 5079D8 extern class Image *game_ui_minimap_compass; // 5079B4 extern std::array game_ui_minimap_dirs; @@ -100,4 +91,24 @@ extern std::array game_ui_options_controls; -extern class Image *game_ui_evtnpc; // 50795C \ No newline at end of file +extern class Image *game_ui_evtnpc; // 50795C + + +extern std::array< std::array, 4> game_ui_player_faces; +extern class Image *game_ui_player_face_eradicated; +extern class Image *game_ui_player_face_dead; + +extern class Image *game_ui_player_selection_frame; // 50C98C +extern class Image *game_ui_player_alert_yellow; // 5079C8 +extern class Image *game_ui_player_alert_red; // 5079CC +extern class Image *game_ui_player_alert_green; // 5079D0 + +extern class Image *game_ui_bar_red; +extern class Image *game_ui_bar_yellow; +extern class Image *game_ui_bar_green; +extern class Image *game_ui_bar_blue; + +extern class Image *game_ui_playerbuff_pain_reflection; +extern class Image *game_ui_playerbuff_hammerhands; +extern class Image *game_ui_playerbuff_preservation; +extern class Image *game_ui_playerbuff_bless; \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIGuilds.cpp --- a/GUI/UI/UIGuilds.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIGuilds.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -166,8 +166,8 @@ { if ( pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v6].uItemID ) { - pRenderer->DrawTextureIndexedAlpha(pX, 90, ItemsInShopTexture[v6]); - ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), ItemsInShopTexture[v6], v6 + 1); + pRenderer->DrawTextureAlphaNew(pX/640.0f, 90/480.0f, shop_ui_items_in_store[v6]); + //ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), shop_ui_items_in_store[v6], v6 + 1); } v62 += 280; ++v6; @@ -178,8 +178,8 @@ { if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v7].uItemID) { - pRenderer->DrawTextureIndexedAlpha(pX, 250, ItemsInShopTexture[v7]); - ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), ItemsInShopTexture[v7], v7 + 1); + pRenderer->DrawTextureAlphaNew(pX/640.0f, 250/480.0f, shop_ui_items_in_store[v7]); + //ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), shop_ui_items_in_store[v7], v7 + 1); } v62 += 280; ++v7; @@ -271,7 +271,8 @@ item_spellbook->Reset(); pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][i].uItemID = pItemNum; pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][i].IsIdentified(); - ItemsInShopTexture[i] = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[pItemNum].pIconName, TEXTURE_16BIT_PALETTE); + + shop_ui_items_in_store[i] = assets->GetImage_16BitColorKey(pItemsTable->pItems[pItemNum].pIconName, 0x7FF); } return; } \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIHouses.cpp --- a/GUI/UI/UIHouses.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIHouses.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -996,12 +996,12 @@ char icon_name[128]; sprintfex(icon_name, "npc%03u", npc_id_arr[i]); - pDialogueNPCPortraits[i] = pIcons_LOD->LoadTexturePtr(icon_name, TEXTURE_16BIT_PALETTE); + pDialogueNPCPortraits[i] = assets->GetImage_16BitColorKey(icon_name, 0x7FF); } if (uHouse_ExitPic) { - pDialogueNPCPortraits[uNumDialogueNPCPortraits] = pIcons_LOD->LoadTexturePtr(pHouse_ExitPictures[uHouse_ExitPic], TEXTURE_16BIT_PALETTE); + pDialogueNPCPortraits[uNumDialogueNPCPortraits] = assets->GetImage_16BitColorKey(pHouse_ExitPictures[uHouse_ExitPic], 0x7FF); ++uNumDialogueNPCPortraits; uHouse_ExitPic = p2DEvents[house - 1].uExitMapID; } @@ -1097,7 +1097,7 @@ for ( uint i = 0; i < 12; ++i ) { if ( pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C - 139][i].uItemID ) - ItemsInShopTexture[i] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C - 139][i].GetIconName(), TEXTURE_16BIT_PALETTE)]; + shop_ui_items_in_store[i] = assets->GetImage_16BitColorKey(pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C - 139][i].GetIconName(), 0x7FF); } } else//generation new books @@ -1340,7 +1340,7 @@ for ( uint i = 0; i < (unsigned __int8)uItemsAmountPerShopType[p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].uType]; ++i ) { if ( pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][i].uItemID ) - ItemsInShopTexture[i] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][i].GetIconName(), TEXTURE_16BIT_PALETTE)]; + shop_ui_items_in_store[i] = assets->GetImage_16BitColorKey(pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][i].GetIconName(), 0x7FF); } } if ( in_current_building_type == BuildingType_WeaponShop ) @@ -1350,7 +1350,7 @@ for ( uint i = 0; i < (unsigned __int8)uItemsAmountPerShopType[p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].uType]; ++i ) { if ( pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][i].uItemID) - weapons_Ypos[i] = rand() % (300 - ItemsInShopTexture[i]->uTextureHeight); + weapons_Ypos[i] = rand() % (300 - shop_ui_items_in_store[i]->GetHeight()); } } } @@ -1362,7 +1362,7 @@ for ( uint i = 0; i < (unsigned __int8)uItemsAmountPerShopType[p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].uType]; ++i ) { if ( pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID ) - ItemsInShopTexture[i] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].GetIconName(), TEXTURE_16BIT_PALETTE)]; + shop_ui_items_in_store[i] = assets->GetImage_16BitColorKey(pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].GetIconName(), 0x7FF); } } if ( in_current_building_type == BuildingType_WeaponShop ) @@ -1372,7 +1372,7 @@ for ( uint i = 0; i < (unsigned __int8)uItemsAmountPerShopType[p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].uType]; ++i ) { if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID) - weapons_Ypos[i] = rand() % (300 - ItemsInShopTexture[i]->uTextureHeight); + weapons_Ypos[i] = rand() % (300 - shop_ui_items_in_store[i]->GetHeight()); } } } diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIMainMenu.cpp --- a/GUI/UI/UIMainMenu.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIMainMenu.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -67,9 +67,21 @@ // pWindow = pGUIWindow_CurrentMenu; + static bool b = false; + if (!b) + { + pUIAnim_Food->icon = pIconsFrameTable->GetIcon("torchA"); + pIconsFrameTable->InitializeAnimation(pUIAnim_Food->icon->id); + b = true; + } + + auto icon = pIconsFrameTable->GetFrame(pUIAnim_Food->icon->id, GetTickCount()/2); + pRenderer->DrawTextureAlphaNew(64 / 640.0f, 48 / 480.0f, icon->texture); + + if (GetCurrentMenuID() == MENU_MAIN) { - Texture_MM7 *pTexture = nullptr; + Image *pTexture = nullptr; if (!pModalWindow)// ??? { auto pButton = pWindow->pControlsHead; @@ -84,23 +96,23 @@ switch (pControlParam) // backlight for buttons { case 0: - pTexture = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE); + pTexture = assets->GetImage_16BitColorKey("title_new", 0x7FF); pY = 172; break; case 1: - pTexture = pIcons_LOD->LoadTexturePtr("title_load", TEXTURE_16BIT_PALETTE); + pTexture = assets->GetImage_16BitColorKey("title_load", 0x7FF); pY = 227; break; case 2: - pTexture = pIcons_LOD->LoadTexturePtr("title_cred", TEXTURE_16BIT_PALETTE); + pTexture = assets->GetImage_16BitColorKey("title_cred", 0x7FF); pY = 282; break; case 3: - pTexture = pIcons_LOD->LoadTexturePtr("title_exit", TEXTURE_16BIT_PALETTE); + pTexture = assets->GetImage_16BitColorKey("title_exit", 0x7FF); pY = 337; break; } - pRenderer->DrawTextureTransparentColorKey(495, pY, pTexture); + pRenderer->DrawTextureAlphaNew(495/640.0f, pY/480.0f, pTexture); } } } diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIPartyCreation.cpp --- a/GUI/UI/UIPartyCreation.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIPartyCreation.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -16,8 +16,9 @@ #include "IO/Mouse.h" #include "IO/Keyboard.h" +#include "GUI/GUIFont.h" #include "GUI/UI/UIPartyCreation.h" -#include "GUI/GUIFont.h" +#include "GUI/UI/UIGame.h" #include "Media/Audio/AudioPlayer.h" @@ -74,11 +75,11 @@ for (uint j = 0; j < 56; ++j) { sprintf(pTmpBuf.data(), "%s%02d", pPlayerPortraitsNames[pParty->pPlayers[i].uCurrentFace], j + 1); - pTextures_PlayerFaces[i][j] = pIcons_LOD->LoadTexturePtr(pTmpBuf.data(), TEXTURE_16BIT_PALETTE); + game_ui_player_faces[i][j] = assets->GetImage_16BitColorKey(pTmpBuf.data(), 0x7FF); } - pTexture_PlayerFaceEradicated = pIcons_LOD->LoadTexturePtr("ERADCATE", TEXTURE_16BIT_PALETTE); - pTexture_PlayerFaceDead = pIcons_LOD->LoadTexturePtr("DEAD", TEXTURE_16BIT_PALETTE); + game_ui_player_face_eradicated = assets->GetImage_16BitColorKey("ERADCATE", 0x7FF); + game_ui_player_face_dead = assets->GetImage_16BitColorKey("DEAD", 0x7FF); ui_partycreation_face_mask = assets->GetImage_16BitColorKey("FACEMASK", 0x7FF); if (SoundSetAction[24][0]) @@ -95,7 +96,8 @@ for ( uint i = 0; i <= 55; ++i ) { sprintf(pTmpBuf.data(), "%s%02d", pPlayerPortraitsNames[face_id], i + 1); - pIcons_LOD->ReloadTexture(pTextures_PlayerFaces[player_id][i], pTmpBuf.data(), 2); + //pIcons_LOD->ReloadTexture(game_ui_player_faces[player_id][i], pTmpBuf.data(), 2); + game_ui_player_faces[player_id][i] = assets->GetImage_16BitColorKey(pTmpBuf.data(), 0x7FF); } } @@ -105,7 +107,7 @@ void GUIWindow_PartyCreation::Update() { int pTextCenter; // eax@3 - IconFrame *pFrame; // eax@3 + Icon *pFrame; // eax@3 int pX; // ecx@7 GUIButton *uPosActiveItem; // edi@12 int v17; // eax@33 @@ -153,10 +155,10 @@ pRenderer->DrawTextureAlphaNew(176/640.0f, 35/480.0f, ui_partycreation_portraits[pParty->pPlayers[1].uCurrentFace]); pRenderer->DrawTextureAlphaNew(335/640.0f, 35/480.0f, ui_partycreation_portraits[pParty->pPlayers[2].uCurrentFace]); pRenderer->DrawTextureAlphaNew(494/640.0f, 35/480.0f, ui_partycreation_portraits[pParty->pPlayers[3].uCurrentFace]); - pFrame = pIconsFrameTable->GetFrame(uIconID_CharacterFrame, pEventTimer->uStartTime); //arrows - pRenderer->DrawTextureIndexedAlpha(pX, 29, &pIcons_LOD->pTextures[pFrame->uTextureID]); + pFrame = pIconsFrameTable->GetFrame(uIconID_CharacterFrame, pEventTimer->uStartTime); + pRenderer->DrawTextureAlphaNew(pX/640.0f, 29/480.0f, pFrame->texture); uPosActiveItem = pGUIWindow_CurrentMenu->GetControl(pGUIWindow_CurrentMenu->pCurrentPosActiveItem); uPlayerCreationUI_ArrowAnim = 18 - (GetTickCount() % 450) / 25; pRenderer->DrawTextureAlphaNew((uPosActiveItem->uZ - 4)/640.0f, uPosActiveItem->uY/480.0f, ui_partycreation_arrow_l[uPlayerCreationUI_ArrowAnim + 1]); diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIPopup.cpp --- a/GUI/UI/UIPopup.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIPopup.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -208,6 +208,9 @@ if (!inspect_item->uItemID) return; + + auto inspect_item_image = assets->GetImage_16BitColorKey(inspect_item->GetIconName(), 0x7FF); + iteminfo_window.Hint = nullptr; iteminfo_window.uFrameWidth = 384; iteminfo_window.uFrameHeight = 180; @@ -217,8 +220,8 @@ else v2 = pMouse->GetCursorPos(&a2)->x - iteminfo_window.uFrameWidth - 30; iteminfo_window.uFrameX = v2; - v78 = 100 - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureWidth; - v81 = 144 - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureHeight; + v78 = 100 - inspect_item_image->GetWidth(); + v81 = 144 - inspect_item_image->GetHeight(); if ( v78 > 0 ) v78 = v78 / 2; if ( v81 <= 0 ) @@ -284,7 +287,7 @@ (iteminfo_window.uFrameX + v78) / 640.0f, (v81 + iteminfo_window.uFrameY + 30) / 480.0f, //pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); - assets->GetImage_16BitAlpha(inspect_item->GetIconName())); + inspect_item_image); if ( inspect_item->IsIdentified()) pText = (char *)inspect_item->GetIdentifiedName(); else @@ -293,11 +296,13 @@ iteminfo_window.DrawTitleText(pFontArrus, 0x64u, ((signed int)iteminfo_window.uFrameHeight >> 1) - pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[32], &iteminfo_window, 0, 0) / 2, Color16(0xFFu, 0x19u, 0x19u), pGlobalTXT_LocalizationStrings[32], 3); //"Broken Item" pRenderer->ResetUIClipRect(); - if ( !areWeLoadingTexture ) + + if (inspect_item_image) { - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); - pIcons_LOD->SyncLoadedFilesCount(); + inspect_item_image->Release(); + inspect_item_image = nullptr; } + return; } if (!inspect_item->IsIdentified()) @@ -309,15 +314,19 @@ iteminfo_window.uFrameHeight -= 12; iteminfo_window.uFrameZ = iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 1; iteminfo_window.uFrameW = iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 1; - pRenderer->DrawTextureIndexedAlpha(iteminfo_window.uFrameX + v78, v81 + iteminfo_window.uFrameY + 30, pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); + pRenderer->DrawTextureAlphaNew( + (iteminfo_window.uFrameX + v78)/640.0f, + (v81 + iteminfo_window.uFrameY + 30)/480.0f, + inspect_item_image); iteminfo_window.DrawTitleText(pFontArrus, 0, 0xCu, Color16(0xFFu, 0xFFu, 0x9Bu), pItemsTable->pItems[inspect_item->uItemID].pUnidentifiedName, 3); iteminfo_window.DrawTitleText(pFontArrus, 0x64u, ((signed int)iteminfo_window.uFrameHeight >> 1) - pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[232], &iteminfo_window, 0, 0) / 2, Color16(0xFFu, 0x19u, 0x19u), pGlobalTXT_LocalizationStrings[232], 3);//"Not Identified" pRenderer->ResetUIClipRect(); - if ( !areWeLoadingTexture ) + + if (inspect_item_image) { - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); - pIcons_LOD->SyncLoadedFilesCount(); + inspect_item_image->Release(); + inspect_item_image = nullptr; } return; } @@ -421,9 +430,11 @@ iteminfo_window.uFrameHeight -= 12; iteminfo_window.uFrameZ = iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 1; iteminfo_window.uFrameW = iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 1; - pRenderer->DrawTextureIndexedAlpha(iteminfo_window.uFrameX + v78, - iteminfo_window.uFrameY + (signed int)(iteminfo_window.uFrameHeight - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureHeight) / 2, - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); + pRenderer->DrawTextureAlphaNew( + (iteminfo_window.uFrameX + v78)/640.0f, + (iteminfo_window.uFrameY + (signed int)(iteminfo_window.uFrameHeight - inspect_item_image->GetHeight()) / 2)/480.0f, + inspect_item_image + ); v34 = (int)(v85 + 35); Str = out_text; @@ -507,8 +518,6 @@ } return; } -// 4E455C: using guessed type int dword_4E455C; -// 506128: using guessed type int areWeLoadingTexture; //----- (0041E360) -------------------------------------------------------- void MonsterPopup_Draw(unsigned int uActorID, GUIWindow *pWindow) diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIQuickReference.cpp --- a/GUI/UI/UIQuickReference.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIQuickReference.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -12,6 +12,9 @@ #include "Media/Audio/AudioPlayer.h" + +Image *ui_game_quickref_background = nullptr; + GUIWindow_QuickReference::GUIWindow_QuickReference() : GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 5, 0) { @@ -22,6 +25,9 @@ //paperdoll_dbrds[2] = assets->GetImage_16BitAlpha(L"BUTTEXI1"); + if (!ui_game_quickref_background) + ui_game_quickref_background = assets->GetImage_16BitColorKey("quikref", 0x7FF); + pBtn_ExitCancel = CreateButton( 0x187u, 0x13Cu, 0x4Bu, 0x21u, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79],// "Exit" @@ -48,7 +54,8 @@ const char *pText; // eax@38 int pFontHeight; // [sp+18h] [bp-14h]@1 - pRenderer->DrawTextureTransparentColorKey(8, 8, pIcons_LOD->LoadTexturePtr("quikref", TEXTURE_16BIT_PALETTE)); + pRenderer->DrawTextureAlphaNew(8/640.0f, 8/480.0f, ui_game_quickref_background); + pFontHeight = LOBYTE(pFontArrus->uFontHeight) + 1; for (uint i = 0; i < 4; ++i) { diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIRest.cpp --- a/GUI/UI/UIRest.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIRest.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -47,7 +47,7 @@ GUIButton2.uHeight = 37; GUIButton2.pParent = pButton_RestUI_WaitUntilDawn->pParent; pAudioPlayer->PlaySound(SOUND_StartMainChoice02, 0, 0, -1, 0, 0, 0, 0); - pRenderer->DrawTextureTransparentColorKey(uFrameX, uFrameY, *((Texture_MM7 **)ptr_1C + 15)); + pRenderer->DrawTextureAlphaNew(uFrameX/640.0f, uFrameY/480.0f, *((Image **)ptr_1C + 15)); viewparams->bRedrawGameUI = 1; GUIButton2.DrawLabel(pGlobalTXT_LocalizationStrings[183], pFontCreate, 0, 0); // Rest & Heal 8 hrs / Отдых и лечение 8 часов GUIButton2.pParent = 0; diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIShops.cpp --- a/GUI/UI/UIShops.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIShops.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -26,6 +26,8 @@ Image *shop_ui_background = nullptr; +std::array shop_ui_items_in_store; + //----- (004B910F) -------------------------------------------------------- void WeaponShopDialog() @@ -92,8 +94,11 @@ { if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID) { - pRenderer->DrawTextureIndexedAlpha((60 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + item_X, weapons_Ypos[i] + 30, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[(60 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + item_X + window->GetWidth() * (weapons_Ypos[i] + 30)], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew( + ((60 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2)) + item_X)/640.0f, + (weapons_Ypos[i] + 30)/480.0f, + shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[(60 - ((signed int)shop_ui_items_in_store[i]->uTextureWidth / 2)) + item_X + window->GetWidth() * (weapons_Ypos[i] + 30)], shop_ui_items_in_store[i], i + 1); } item_X += 70; } @@ -143,8 +148,11 @@ { if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID) { - pRenderer->DrawTextureIndexedAlpha((60 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + item_X, weapons_Ypos[i] + 30, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[(60 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + item_X + window->GetWidth() * (weapons_Ypos[i] + 30)], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew( + ((60 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2)) + item_X)/640.0f, + (weapons_Ypos[i] + 30)/480.0f, + shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[(60 - ((signed int)shop_ui_items_in_store[i]->uTextureWidth / 2)) + item_X + window->GetWidth() * (weapons_Ypos[i] + 30)], shop_ui_items_in_store[i], i + 1); } item_X += 70; } @@ -420,15 +428,21 @@ { if ( i >= 4 ) //low row { - pRenderer->DrawTextureIndexedAlpha((90 - (ItemsInShopTexture[i]->uTextureWidth / 2)) + item_x - 420, 126, ItemsInShopTexture[i]); - v59 = (90 - (ItemsInShopTexture[i]->uTextureWidth / 2)) + item_x + 80220; + pRenderer->DrawTextureAlphaNew( + ((90 - (shop_ui_items_in_store[i]->GetWidth() / 2)) + item_x - 420)/640.0f, + 126/480.0f, + shop_ui_items_in_store[i]); + v59 = (90 - (shop_ui_items_in_store[i]->GetWidth() / 2)) + item_x + 80220; } else { - pRenderer->DrawTextureIndexedAlpha(( 86 - (ItemsInShopTexture[i]->uTextureWidth / 2)) + item_x, 98 - ItemsInShopTexture[i]->uTextureHeight, ItemsInShopTexture[i]); - v59 = item_x + (86 - (ItemsInShopTexture[i]->uTextureWidth / 2)) + window->GetWidth() * (98 - ItemsInShopTexture[i]->uTextureHeight); + pRenderer->DrawTextureAlphaNew( + ((86 - (shop_ui_items_in_store[i]->GetWidth() / 2)) + item_x)/640.0f, + (98 - shop_ui_items_in_store[i]->GetWidth())/480.0f, + shop_ui_items_in_store[i]); + v59 = item_x + (86 - (shop_ui_items_in_store[i]->GetWidth() / 2)) + window->GetWidth() * (98 - shop_ui_items_in_store[i]->GetHeight()); } - ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], ItemsInShopTexture[i], i + 1); + //ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], shop_ui_items_in_store[i], i + 1); } item_x += 105; } @@ -479,15 +493,21 @@ { if ( i >= 4 ) { - pRenderer->DrawTextureIndexedAlpha(item_x + (90 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) - 420, 126, ItemsInShopTexture[i]); - v59 = item_x + (90 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + 80220; + pRenderer->DrawTextureAlphaNew( + (item_x + (90 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2)) - 420)/640.0f, + 126/480.0f, + shop_ui_items_in_store[i]); + v59 = item_x + (90 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2)) + 80220; } else { - pRenderer->DrawTextureIndexedAlpha(86 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2) + item_x, 98 - ItemsInShopTexture[i]->uTextureHeight, ItemsInShopTexture[i]); - v59 = (86 - ((signed int)ItemsInShopTexture[i]->uTextureWidth / 2)) + item_x + window->GetWidth() * (98 - ItemsInShopTexture[i]->uTextureHeight); + pRenderer->DrawTextureAlphaNew( + (86 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2) + item_x)/640.0f, + (98 - shop_ui_items_in_store[i]->GetHeight())/480.0f, + shop_ui_items_in_store[i]); + v59 = (86 - ((signed int)shop_ui_items_in_store[i]->GetWidth() / 2)) + item_x + window->GetWidth() * (98 - shop_ui_items_in_store[i]->GetHeight()); } - ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], ItemsInShopTexture[i], i + 1); + //ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], shop_ui_items_in_store[i], i + 1); } item_x += 105; } @@ -764,38 +784,38 @@ { if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID ) { - product_height_1row = 152 - ItemsInShopTexture[i]->uTextureHeight; + product_height_1row = 152 - shop_ui_items_in_store[i]->GetHeight(); if ( (signed int)product_height_1row < 1 ) product_height_1row = 0; - product_width_1row = 75 * i - ItemsInShopTexture[i]->uTextureWidth / 2 + 40; + product_width_1row = 75 * i - shop_ui_items_in_store[i]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_1row > 457 - ItemsInShopTexture[5]->uTextureWidth ) - product_width_1row = 457 - ItemsInShopTexture[5]->uTextureWidth; + if ( (signed int)product_width_1row > 457 - shop_ui_items_in_store[5]->GetWidth()) + product_width_1row = 457 - shop_ui_items_in_store[5]->GetWidth(); } } else if ( (signed int)product_width_1row < 18 ) product_width_1row = 18; - pRenderer->DrawTextureIndexedAlpha(product_width_1row, product_height_1row, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew(product_width_1row/640.0f, product_height_1row/480.0f, shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], shop_ui_items_in_store[i], i + 1); } } for ( uint i = 0; i < 6; ++i ) { if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i + 6].uItemID ) { - product_height_2row = 308 - ItemsInShopTexture[i + 6]->uTextureHeight; + product_height_2row = 308 - shop_ui_items_in_store[i + 6]->GetHeight(); if ( (signed int)product_height_2row < 1 ) product_height_2row = 0; - product_width_2row = 75 * i - ItemsInShopTexture[i + 6]->uTextureWidth / 2 + 40; + product_width_2row = 75 * i - shop_ui_items_in_store[i + 6]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_2row > 457 - ItemsInShopTexture[11]->uTextureWidth ) - product_width_2row = 457 - ItemsInShopTexture[11]->uTextureWidth; + if ( (signed int)product_width_2row > 457 - shop_ui_items_in_store[11]->GetWidth()) + product_width_2row = 457 - shop_ui_items_in_store[11]->GetWidth(); } } else @@ -803,8 +823,8 @@ if ( (signed int)product_width_2row < 18 ) product_width_2row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_2row, product_height_2row, ItemsInShopTexture[i + 6]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], ItemsInShopTexture[i + 6], i + 7); + pRenderer->DrawTextureAlphaNew(product_width_2row/640.0f, product_height_2row/480.0f, shop_ui_items_in_store[i + 6]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], shop_ui_items_in_store[i + 6], i + 7); } } if ( HouseUI_CheckIfPlayerCanInteract() ) @@ -849,16 +869,16 @@ { if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID) { - product_height_1row = 152 - ItemsInShopTexture[i]->uTextureHeight; + product_height_1row = 152 - shop_ui_items_in_store[i]->GetHeight(); if ( (signed int)product_height_1row < 1 ) product_height_1row = 0; - product_width_1row = 75 * i - ItemsInShopTexture[i]->uTextureWidth / 2 + 40; + product_width_1row = 75 * i - shop_ui_items_in_store[i]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_1row > 457 - ItemsInShopTexture[5]->uTextureWidth ) - product_width_1row = 457 - ItemsInShopTexture[5]->uTextureWidth; + if ( (signed int)product_width_1row > 457 - shop_ui_items_in_store[5]->GetWidth()) + product_width_1row = 457 - shop_ui_items_in_store[5]->GetWidth(); } } else @@ -866,24 +886,24 @@ if ( (signed int)product_width_1row < 18 ) product_width_1row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_1row, product_height_1row, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew(product_width_1row/640.0f, product_height_1row/480.0f, shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], shop_ui_items_in_store[i], i + 1); } } for ( uint i = 0; i < 6; ++i ) { if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)i + 6].uItemID) //not itemid { - product_height_2row = 308 - ItemsInShopTexture[i + 6]->uTextureHeight; + product_height_2row = 308 - shop_ui_items_in_store[i + 6]->GetHeight(); if ( (signed int)product_height_2row < 1 ) product_height_2row = 0; - product_width_2row = 75 * i - ItemsInShopTexture[i + 6]->uTextureWidth / 2 + 40; + product_width_2row = 75 * i - shop_ui_items_in_store[i + 6]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_2row > 457 - ItemsInShopTexture[11]->uTextureWidth ) - product_width_2row = 457 - ItemsInShopTexture[11]->uTextureWidth; + if ( (signed int)product_width_2row > 457 - shop_ui_items_in_store[11]->GetWidth()) + product_width_2row = 457 - shop_ui_items_in_store[11]->GetWidth(); } } else @@ -891,8 +911,8 @@ if ( (signed int)product_width_2row < 18 ) product_width_2row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_2row, product_height_2row, ItemsInShopTexture[i + 6]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], ItemsInShopTexture[i + 6], i + 7); + pRenderer->DrawTextureAlphaNew(product_width_2row/640.0f, product_height_2row/480.0f, shop_ui_items_in_store[i + 6]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], shop_ui_items_in_store[i + 6], i + 7); } } if ( HouseUI_CheckIfPlayerCanInteract() ) @@ -1138,16 +1158,16 @@ { if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID) { - product_height_1row = 152 - ItemsInShopTexture[i]->uTextureHeight; + product_height_1row = 152 - shop_ui_items_in_store[i]->GetHeight(); if ( (signed int)product_height_1row < 1 ) product_height_1row = 0; - product_width_1row = 75 * i - ItemsInShopTexture[i]->uTextureWidth / 2 + 40; + product_width_1row = 75 * i - shop_ui_items_in_store[i]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_1row > 457 - ItemsInShopTexture[5]->uTextureWidth ) - product_width_1row = 457 - ItemsInShopTexture[5]->uTextureWidth; + if ( (signed int)product_width_1row > 457 - shop_ui_items_in_store[5]->GetWidth()) + product_width_1row = 457 - shop_ui_items_in_store[5]->GetWidth(); } } else @@ -1155,22 +1175,22 @@ if ( (signed int)product_width_1row < 18 ) product_width_1row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_1row, product_height_1row, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew(product_width_1row/640.0f, product_height_1row/480.0f, shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], shop_ui_items_in_store[i], i + 1); } } for ( uint i = 0; i < 6; ++i ) { if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i + 6].uItemID) { - product_height_2row = 306 - ItemsInShopTexture[i + 6]->uTextureHeight; - product_width_2row = 75 * i - ItemsInShopTexture[i + 6]->uTextureWidth / 2 + 40; + product_height_2row = 306 - shop_ui_items_in_store[i + 6]->GetHeight(); + product_width_2row = 75 * i - shop_ui_items_in_store[i + 6]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_2row > 457 - ItemsInShopTexture[11]->uTextureWidth ) - product_width_2row = 457 - ItemsInShopTexture[11]->uTextureWidth; + if ( (signed int)product_width_2row > 457 - shop_ui_items_in_store[11]->GetWidth()) + product_width_2row = 457 - shop_ui_items_in_store[11]->GetWidth(); } } else @@ -1178,8 +1198,8 @@ if ( (signed int)product_width_2row < 18 ) product_width_2row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_2row, product_height_2row, ItemsInShopTexture[i + 6]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], ItemsInShopTexture[i + 6], i + 7); + pRenderer->DrawTextureAlphaNew(product_width_2row/640.0f, product_height_2row/480.0f, shop_ui_items_in_store[i + 6]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], shop_ui_items_in_store[i + 6], i + 7); } } if ( HouseUI_CheckIfPlayerCanInteract() ) @@ -1224,16 +1244,16 @@ { if ( pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID ) { - product_height_1row = 152 - ItemsInShopTexture[i]->uTextureHeight; + product_height_1row = 152 - shop_ui_items_in_store[i]->GetHeight(); if ( (signed int)product_height_1row < 1 ) product_height_1row = 0; - product_width_1row = 75 * i - ItemsInShopTexture[i]->uTextureWidth / 2 + 40; + product_width_1row = 75 * i - shop_ui_items_in_store[i]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_1row > 457 - ItemsInShopTexture[5]->uTextureWidth ) - product_width_1row = 457 - ItemsInShopTexture[5]->uTextureWidth; + if ( (signed int)product_width_1row > 457 - shop_ui_items_in_store[5]->GetWidth()) + product_width_1row = 457 - shop_ui_items_in_store[5]->GetWidth(); } } else @@ -1241,24 +1261,24 @@ if ( (signed int)product_width_1row < 18 ) product_width_1row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_1row, product_height_1row, ItemsInShopTexture[i]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], ItemsInShopTexture[i], i + 1); + pRenderer->DrawTextureAlphaNew(product_width_1row/640.0f, product_height_1row/480.0f, shop_ui_items_in_store[i]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_1row + window->GetWidth() * product_height_1row], shop_ui_items_in_store[i], i + 1); } } for ( uint i = 0; i < 6; ++i ) { if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i + 6].uItemID) { - product_height_2row = 306 - ItemsInShopTexture[i + 6]->uTextureHeight; + product_height_2row = 306 - shop_ui_items_in_store[i + 6]->GetHeight(); if ( (signed int)product_height_2row < 1 ) product_height_2row = 0; - product_width_2row = 75 * i - ItemsInShopTexture[i + 6]->uTextureWidth / 2 + 40; + product_width_2row = 75 * i - shop_ui_items_in_store[i + 6]->GetWidth() / 2 + 40; if ( i ) { if ( i == 5 ) { - if ( (signed int)product_width_2row > 457 - ItemsInShopTexture[11]->uTextureWidth ) - product_width_2row = 457 - ItemsInShopTexture[11]->uTextureWidth; + if ( (signed int)product_width_2row > 457 - shop_ui_items_in_store[11]->GetWidth()) + product_width_2row = 457 - shop_ui_items_in_store[11]->GetWidth(); } } else @@ -1266,8 +1286,8 @@ if ( (signed int)product_width_2row < 18 ) product_width_2row = 18; } - pRenderer->DrawTextureIndexedAlpha(product_width_2row, product_height_2row, ItemsInShopTexture[i + 6]); - ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], ItemsInShopTexture[i + 6], i + 7); + pRenderer->DrawTextureAlphaNew(product_width_2row/640.0f, product_height_2row/480.0f, shop_ui_items_in_store[i + 6]); + //ZBuffer_DoFill2(&pRenderer->pActiveZBuffer[product_width_2row + window->GetWidth() * product_height_2row], shop_ui_items_in_store[i + 6], i + 7); } } if ( HouseUI_CheckIfPlayerCanInteract() ) diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UIShops.h --- a/GUI/UI/UIShops.h Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UIShops.h Wed Mar 09 01:39:52 2016 +0200 @@ -6,4 +6,6 @@ void sub_4B1447_party_fine(int shopId, int stealingResult, int fineToAdd); -extern class Image *shop_ui_background; \ No newline at end of file +extern class Image *shop_ui_background; + +extern std::array shop_ui_items_in_store; \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 GUI/UI/UiGame.cpp --- a/GUI/UI/UiGame.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/GUI/UI/UiGame.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -44,8 +44,6 @@ #include "Media/Audio/AudioPlayer.h" -int uTextureID_GameUI_CharSelectionFrame; // 50C98C - Image *game_ui_statusbar = nullptr; Image *game_ui_rightframe = nullptr; @@ -60,15 +58,6 @@ Image *game_ui_monster_hp_border_left = nullptr; Image *game_ui_monster_hp_border_right = nullptr; -Image *game_ui_bar_red = nullptr; -Image *game_ui_bar_yellow = nullptr; -Image *game_ui_bar_green = nullptr; -Image *game_ui_bar_blue = nullptr; - -Image *game_ui_player_alert_yellow = nullptr; // 5079C8 -Image *game_ui_player_alert_red = nullptr; // 5079CC -Image *game_ui_player_alert_green = nullptr; // 5079D0 - Image *game_ui_minimap_frame = nullptr; // 5079D8 Image *game_ui_minimap_compass = nullptr; // 5079B4 std::array game_ui_minimap_dirs; @@ -105,6 +94,24 @@ Image *game_ui_evtnpc = nullptr; // 50795C +std::array< std::array, 4> game_ui_player_faces; +Image *game_ui_player_face_eradicated = nullptr; +Image *game_ui_player_face_dead = nullptr; + +Image *game_ui_player_selection_frame = nullptr; // 50C98C +Image *game_ui_player_alert_yellow = nullptr; // 5079C8 +Image *game_ui_player_alert_red = nullptr; // 5079CC +Image *game_ui_player_alert_green = nullptr; // 5079D0 + +Image *game_ui_bar_red = nullptr; +Image *game_ui_bar_yellow = nullptr; +Image *game_ui_bar_green = nullptr; +Image *game_ui_bar_blue = nullptr; + +Image *game_ui_playerbuff_pain_reflection = nullptr; +Image *game_ui_playerbuff_hammerhands = nullptr; +Image *game_ui_playerbuff_preservation = nullptr; +Image *game_ui_playerbuff_bless = nullptr; GUIWindow_GameMenu::GUIWindow_GameMenu() : GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, nullptr) @@ -759,9 +766,11 @@ popup_window.uFrameZ = popup_window.uFrameX + 399; popup_window.DrawMessageBox(0); sprintfex(pTmpBuf2.data(), "NPC%03d", pNPC->uPortraitID); - pRenderer->DrawTextureTransparentColorKey(popup_window.uFrameX + 22, popup_window.uFrameY + 36, - (Texture_MM7 *)(pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE) != -1 - ? &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE)] : 0)); + pRenderer->DrawTextureAlphaNew( + (popup_window.uFrameX + 22)/640.0f, + (popup_window.uFrameY + 36)/480.0f, + assets->GetImage_16BitColorKey(pTmpBuf2.data(), 0x7FF) + ); if ( pNPC->uProfession ) { v11 = pTmpBuf.data(); @@ -814,7 +823,7 @@ game_ui_dialogue_background = assets->GetImage_16Bit(pContainer); sprintfex(pContainer, "npc%03u", pNPCInfo->uPortraitID); v9 = 0; - pDialogueNPCPortraits[0] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); + pDialogueNPCPortraits[0] = assets->GetImage_16BitColorKey(pContainer, 0x7FF); dword_591084 = areWeLoadingTexture; if ( !pNPCInfo->Hired() && pNPCInfo->Location2D >= 0 ) @@ -916,7 +925,7 @@ pRenderer->DrawTextureNew(477/640.0f, 0, game_ui_dialogue_background); pRenderer->DrawTextureAlphaNew(468/640.0f, 0, game_ui_right_panel_frame); pRenderer->DrawTextureAlphaNew((pNPCPortraits_x[0][0] - 4)/640.0f, (pNPCPortraits_y[0][0] - 4)/480.0f, game_ui_evtnpc); - pRenderer->DrawTextureTransparentColorKey(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pDialogueNPCPortraits[0]); + pRenderer->DrawTextureAlphaNew(pNPCPortraits_x[0][0]/640.0f, pNPCPortraits_y[0][0]/480.0f, pDialogueNPCPortraits[0]); if (pNPC->uProfession) { @@ -1306,7 +1315,7 @@ //----- (0041D3B7) -------------------------------------------------------- void GameUI_CharacterQuickRecord_Draw(GUIWindow *window, Player *player) { - Texture_MM7 *v13; // eax@6 + Image *v13; // eax@6 PlayerFrame *v15; // eax@12 unsigned int pTextColor; // eax@15 const char *v29; // eax@16 @@ -1326,9 +1335,9 @@ window->DrawMessageBox(0); if (player->IsEradicated()) - v13 = pTexture_PlayerFaceEradicated; + v13 = game_ui_player_face_eradicated; else if (player->IsDead()) - v13 = pTexture_PlayerFaceDead; + v13 = game_ui_player_face_dead; else { uFramesetID = pPlayerFrameTable->GetFrameIdByExpression(player->expression); @@ -1339,10 +1348,10 @@ else v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, pMiscTimer->Time()); player->field_1AA2 = v15->uTextureID - 1; - v13 = pTextures_PlayerFaces[(unsigned int)window->ptr_1C][v15->uTextureID - 1]; + v13 = game_ui_player_faces[(unsigned int)window->ptr_1C][v15->uTextureID - 1]; } - pRenderer->DrawTextureIndexedAlpha(window->uFrameX + 24, window->uFrameY + 24, v13); + pRenderer->DrawTextureAlphaNew((window->uFrameX + 24)/640.0f, (window->uFrameY + 24)/480.0f, v13); sprintfex(pTmpBuf.data(), "\f%05d", ui_character_header_text_color); sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[429], player->pName, pClassNames[player->classType]); // "%s the %s" @@ -1951,15 +1960,17 @@ void GameUI_DrawCharacterSelectionFrame() { if ( uActiveCharacter ) - pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[uActiveCharacter - 1] - 9, 380, - pIcons_LOD->GetTexture(uTextureID_GameUI_CharSelectionFrame)); + pRenderer->DrawTextureAlphaNew( + (pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[uActiveCharacter - 1] - 9)/640.0f, + 380/480.0f, + game_ui_player_selection_frame); } //----- (0044162D) -------------------------------------------------------- void GameUI_DrawPartySpells() { unsigned int v0; // ebp@1 - Texture_MM7 *spell_texture; // [sp-4h] [bp-1Ch]@12 + Image *spell_texture; // [sp-4h] [bp-1Ch]@12 //Texture_MM7 *v9; // [sp-4h] [bp-1Ch]@21 v0 = (signed __int64)((double)GetTickCount() * 0.050000001); @@ -1971,9 +1982,11 @@ { Texture_MM7* tex = pIcons_LOD->GetTexture(pTextureIDs_PartyBuffIcons[i]); //v3 = pTextureIDs_PartyBuffIcons[i]; - pRenderer->_4A65CC(pPartySpellbuffsUI_XYs[i][0], - pPartySpellbuffsUI_XYs[i][1], tex, tex, - v0 + 20 * pPartySpellbuffsUI_smthns[i], 0, 63); + pRenderer->_4A65CC( + pPartySpellbuffsUI_XYs[i][0], + pPartySpellbuffsUI_XYs[i][1], tex, tex, + v0 + 20 * pPartySpellbuffsUI_smthns[i], 0, 63 + ); } //++v1; } @@ -1983,22 +1996,22 @@ if (pParty->FlyActive()) { if ( pParty->bFlying ) - spell_texture = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, v0)->uTextureID); + spell_texture = pIconsFrameTable->GetFrame(uIconIdx_FlySpell, v0)->texture; else - spell_texture = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, 0)->uTextureID); + spell_texture = pIconsFrameTable->GetFrame(uIconIdx_FlySpell, 0)->texture; //if ( pRenderer->pRenderD3D ) - pRenderer->DrawTextureTransparentColorKey(8, 8, spell_texture); + pRenderer->DrawTextureAlphaNew(8/640.0f, 8/480.0f, spell_texture); /*else pRenderer->DrawTextureIndexedAlpha(8, 8, v7);*/ } if ( pParty->WaterWalkActive() ) { if ( pParty->uFlags & PARTY_FLAGS_1_STANDING_ON_WATER ) - spell_texture = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, v0)->uTextureID); + spell_texture = pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, v0)->texture; else - spell_texture = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, 0)->uTextureID); + spell_texture = pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, 0)->texture; //if ( pRenderer->pRenderD3D ) - pRenderer->DrawTextureTransparentColorKey(396, 8, spell_texture); + pRenderer->DrawTextureAlphaNew(396/640.0f, 8/480.0f, spell_texture); /*else pRenderer->DrawTextureIndexedAlpha(396, 8, v9);*/ } @@ -2006,13 +2019,13 @@ for (uint i = 0; i < 4; ++i) { if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uExpireTime ) - pRenderer->DrawTextureTransparentColorKey(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 427, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Hammerhands)); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72)/640.0f, 427/480.0f, game_ui_playerbuff_hammerhands); if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime ) - pRenderer->DrawTextureTransparentColorKey(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 393, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Bless)); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72)/640.0f, 393/480.0f, game_ui_playerbuff_bless); if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_PRESERVATION].uExpireTime ) - pRenderer->DrawTextureTransparentColorKey(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 410, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Preservation)); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72)/640.0f, 410/480.0f, game_ui_playerbuff_preservation); if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_PAIN_REFLECTION].uExpireTime ) - pRenderer->DrawTextureTransparentColorKey(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 444, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_PainReflection)); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72)/640.0f, 444/480.0f, game_ui_playerbuff_pain_reflection); } } @@ -2021,7 +2034,7 @@ { unsigned int face_expression_ID; // eax@17 PlayerFrame *pFrame; // eax@21 - Texture_MM7 *pPortrait; // [sp-4h] [bp-1Ch]@27 + Image *pPortrait; // [sp-4h] [bp-1Ch]@27 if ( _A750D8_player_speech_timer ) { @@ -2039,11 +2052,11 @@ Player* pPlayer = &pParty->pPlayers[i]; if ( pPlayer->IsEradicated() ) { - pPortrait = pTexture_PlayerFaceEradicated; + pPortrait = game_ui_player_face_eradicated; if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) - pRenderer->DrawTranslucent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); + pRenderer->DrawTextureGrayShade(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]/640.0f, 388/480.0f, pPortrait); else - pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1, 388, pPortrait); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1)/640.0f, 388/480.0f, pPortrait); if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HEROISM].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_SHIELD].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) @@ -2052,11 +2065,11 @@ } if (pPlayer->IsDead()) { - pPortrait = pTexture_PlayerFaceDead; + pPortrait = game_ui_player_face_dead; if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) - pRenderer->DrawTranslucent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); + pRenderer->DrawTextureGrayShade(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]/640.0f, 388/480.0f, pPortrait); else - pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1, 388, pPortrait); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1)/640.0f, 388/480.0f, pPortrait); if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HEROISM].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_SHIELD].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) @@ -2079,11 +2092,11 @@ if (pPlayer->field_1AA2 != pFrame->uTextureID - 1 || _this ) { pPlayer->field_1AA2 = pFrame->uTextureID - 1; - pPortrait = (Texture_MM7 *)pTextures_PlayerFaces[i][pPlayer->field_1AA2];//pFace = (Texture_MM7 *)pTextures_PlayerFaces[i][pFrame->uTextureID]; + pPortrait = game_ui_player_faces[i][pPlayer->field_1AA2];//pFace = (Texture_MM7 *)game_ui_player_faces[i][pFrame->uTextureID]; if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) - pRenderer->DrawTranslucent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); + pRenderer->DrawTextureGrayShade(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]/640.0f, 388/480.0f, pPortrait); else - pRenderer->DrawTextureIndexedAlpha(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1, 388, pPortrait); + pRenderer->DrawTextureAlphaNew((pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 1)/640.0f, 388/480.0f, pPortrait); if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HEROISM].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_SHIELD].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) @@ -2483,13 +2496,19 @@ { if (pParty->TorchlightActive()) { - IconFrame* icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnum_Torchlight->uIconID, pEventTimer->Time()); - pRenderer->DrawTextureIndexedAlpha(pUIAnum_Torchlight->x, pUIAnum_Torchlight->y, pIcons_LOD->GetTexture(icon->uTextureID)); + pRenderer->DrawTextureAlphaNew( + pUIAnum_Torchlight->x/640.0f, + pUIAnum_Torchlight->y/480.0f, + pIconsFrameTable->GetFrame(pUIAnum_Torchlight->icon->id, pEventTimer->Time())->texture + ); } if (pParty->WizardEyeActive()) { - IconFrame* icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnim_WizardEye->uIconID, pEventTimer->Time()); - pRenderer->DrawTextureIndexedAlpha(pUIAnim_WizardEye->x, pUIAnim_WizardEye->y, pIcons_LOD->GetTexture(icon->uTextureID)); + pRenderer->DrawTextureAlphaNew( + pUIAnim_WizardEye->x/640.0f, + pUIAnim_WizardEye->y/480.0f, + pIconsFrameTable->GetFrame(pUIAnim_WizardEye->icon->id, pEventTimer->Time())->texture + ); } } } @@ -2530,14 +2549,22 @@ if ( (unsigned __int8)pTmpBuf[i] >= 2 ) { sprintf(pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)pTmpBuf[i] + 499].uPortraitID); - pRenderer->DrawTextureTransparentColorKey(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], - pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE))); + pRenderer->DrawTextureAlphaNew( + pHiredNPCsIconsOffsetsX[pNPC_limit_ID]/640.0f, + pHiredNPCsIconsOffsetsY[pNPC_limit_ID]/480.0f, + //pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)) + assets->GetImage_16BitColorKey(pContainer, 0x7FF) + ); } else { sprintf(pContainer, "NPC%03d", pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].uPortraitID); - pRenderer->DrawTextureTransparentColorKey(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], - pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE))); + pRenderer->DrawTextureAlphaNew( + pHiredNPCsIconsOffsetsX[pNPC_limit_ID]/640.0f, + pHiredNPCsIconsOffsetsY[pNPC_limit_ID]/480.0f, + //pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)) + assets->GetImage_16BitColorKey(pContainer, 0x7FF) + ); if ( pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].evt_A == 1 ) { uFrameID = pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].evt_B; @@ -2546,12 +2573,16 @@ { for ( v13 = 0; v13 < pIconsFrameTable->uNumIcons; ++v13 ) { - if ( !_stricmp("spell96", pIconsFrameTable->pIcons[v13].pAnimationName) ) + if ( !_stricmp("spell96", pIconsFrameTable->pIcons[v13].GetAnimationName()) ) break; } } - pRenderer->DrawTextureIndexedAlpha(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], - &pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(v13, uFrameID)->uTextureID]); + pRenderer->DrawTextureAlphaNew( + pHiredNPCsIconsOffsetsX[pNPC_limit_ID]/640.0f, + pHiredNPCsIconsOffsetsY[pNPC_limit_ID]/480.0f, + //&pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(v13, uFrameID)->uTextureID] + pIconsFrameTable->GetFrame(v13, uFrameID)->texture + ); } } ++pNPC_limit_ID; diff -r dd36326a9994 -r a76d408c5132 Game/Game.cpp --- a/Game/Game.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Game/Game.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -6,7 +6,6 @@ #include "Engine/Timer.h" #include "Engine/texts.h" #include "Engine/SaveLoad.h" -#include "Engine/Registry.h" #include "Engine/Objects/Actor.h" #include "Engine/Objects/Chest.h" #include "Engine/Objects/ObjectList.h" diff -r dd36326a9994 -r a76d408c5132 Game/GameMenu.cpp --- a/Game/GameMenu.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Game/GameMenu.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -5,7 +5,6 @@ #include "Engine/LOD.h" #include "Engine/Party.h" #include "Engine/SaveLoad.h" -#include "Engine/Registry.h" #include "Engine/texts.h" #include "Engine/Graphics/IRender.h" #include "Engine/Graphics/Viewport.h" diff -r dd36326a9994 -r a76d408c5132 IO/Keyboard.cpp --- a/IO/Keyboard.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/IO/Keyboard.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -6,7 +6,6 @@ #include "Engine/Engine.h" #include "Engine/Party.h" #include "Engine/Timer.h" -#include "Engine/Registry.h" #include "Engine/TurnEngine/TurnEngine.h" #include "Engine/Graphics/Vis.h" #include "Engine/Graphics/Weather.h" diff -r dd36326a9994 -r a76d408c5132 Media/Audio/AudioPlayer.cpp --- a/Media/Audio/AudioPlayer.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/Media/Audio/AudioPlayer.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -22,7 +22,6 @@ #include "Engine/MapInfo.h" #include "GUI/GUIWindow.h" #include "Engine/Graphics/Level/Decoration.h" -#include "Engine/Registry.h" #include "Media/Video/Bink_Smacker.h" diff -r dd36326a9994 -r a76d408c5132 OSAPI.cpp --- a/OSAPI.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/OSAPI.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -14,6 +14,80 @@ + + +bool ReadWindowsRegistryStringRecursive(HKEY parent_key, const char *path, char *out_string, int out_string_size) +{ + char current_key[128]; + char path_tail[1024]; + + const char *delimiter = strstr(path, "/"); + if (delimiter) + { + strncpy(current_key, path, delimiter - path); + current_key[delimiter - path] = '\0'; + + strcpy(path_tail, delimiter + 1); + + if (!parent_key) + { + if (!strcmpi(current_key, "HKEY_CLASSES_ROOT")) + parent_key = HKEY_CLASSES_ROOT; + else if (!strcmpi(current_key, "HKEY_CURRENT_CONFIG")) + parent_key = HKEY_CURRENT_CONFIG; + else if (!strcmpi(current_key, "HKEY_CURRENT_USER")) + parent_key = HKEY_CURRENT_USER; + else if (!strcmpi(current_key, "HKEY_LOCAL_MACHINE")) + parent_key = HKEY_LOCAL_MACHINE; + else if (!strcmpi(current_key, "HKEY_USERS")) + parent_key = HKEY_USERS; + else return false; + + delimiter = strstr(path_tail, "/"); + if (delimiter) + { + strncpy(current_key, path_tail, delimiter - path_tail); + current_key[delimiter - path_tail] = '\0'; + + strcpy(path_tail, delimiter + 1); + } + else return false; + } + + bool result = false; + HKEY key; + if (!RegOpenKeyExA(parent_key, current_key, 0, KEY_READ | KEY_WOW64_32KEY, &key)) + { + /*int idx = 0, r; + do { + char value_name[1024]; + DWORD value_name_size = sizeof(value_name); + r = RegEnumValueA(key, idx++, value_name, &value_name_size, nullptr, nullptr, nullptr, nullptr); + __debugbreak(); + } while (r == ERROR_SUCCESS);*/ + + result = ReadWindowsRegistryStringRecursive(key, path_tail, out_string, out_string_size); + RegCloseKey(key); + } + + return result; + } + else + { + DWORD data_size = out_string_size; + if (RegQueryValueExA(parent_key, path, nullptr, nullptr, (LPBYTE)out_string, &data_size)) + return false; + return true; + } +} + +bool ReadWindowsRegistryString(const char *path, char *out_string, int out_string_size) +{ + return ReadWindowsRegistryStringRecursive(nullptr, path, out_string, out_string_size); +} + + + //----- (00462C94) -------------------------------------------------------- int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hprevinstance, wchar_t *lpCmdLine, int nShowCmd) { @@ -24,8 +98,19 @@ #endif Log::Initialize(); - - //if (HWND hMM7Window = FindWindowW(L"MM7", 0)) + + bool mm7_installation_found = false; + char mm7_path[2048]; + + // standard 1.0 installation + if (!mm7_installation_found) + mm7_installation_found = ReadWindowsRegistryString("HKEY_LOCAL_MACHINE/SOFTWARE/New World Computing/Might and Magic VII/1.0/AppPath", mm7_path, sizeof(mm7_path)); + + // GoG version + if (!mm7_installation_found) + mm7_installation_found = ReadWindowsRegistryString("HKEY_LOCAL_MACHINE/SOFTWARE/GOG.com/GOGMM7/PATH", mm7_path, sizeof(mm7_path)); + + if (HWND hMM7Window = FindWindowW(L"M&MTrilogy", 0))//check whether the window is open { if (IsIconic(hMM7Window)) @@ -53,4 +138,175 @@ void MsgBox(const wchar_t *msg, const wchar_t *title) { MessageBoxW(nullptr, msg, title, 0); +} + + + + +//----- (004649EF) -------------------------------------------------------- +int ReadWindowsRegistryInt(const char *pKey, int uDefValue) +{ + DWORD cbData; // [sp+8h] [bp-20h]@1 + LPCSTR lpValueName; // [sp+Ch] [bp-1Ch]@1 + DWORD dwDisposition; // [sp+10h] [bp-18h]@2 + BYTE Data[4]; // [sp+14h] [bp-14h]@5 + HKEY hKey; // [sp+18h] [bp-10h]@1 + HKEY phkResult; // [sp+1Ch] [bp-Ch]@1 + HKEY v10; // [sp+20h] [bp-8h]@1 + HKEY v11; // [sp+24h] [bp-4h]@1 + + lpValueName = pKey; + v11 = 0; + v10 = 0; + hKey = 0; + phkResult = 0; + cbData = 4; + if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ | KEY_WOW64_32KEY, &hKey))// for 64 bit + { + if (!RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition)) + { + if (!RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v10, &dwDisposition)) + { + if (!RegCreateKeyExA(v10, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v11, &dwDisposition)) + { + LSTATUS status; + if (status = RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData)) + { + status; + GetLastError(); + + *(int *)Data = uDefValue; + RegSetValueExA(v11, lpValueName, 0, 4, Data, 4); + } + RegCloseKey(v11); + } + RegCloseKey(v10); + } + RegCloseKey(phkResult); + } + RegCloseKey(hKey); + } + return *(int *)Data; +} + +//----- (00464B02) -------------------------------------------------------- +void WriteWindowsRegistryString(const char *pKey, const char *pString) +{ + size_t v2; // eax@5 + const char *lpValueName; // [sp+4h] [bp-1Ch]@1 + const char *Str; // [sp+8h] [bp-18h]@1 + DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 + HKEY hKey; // [sp+10h] [bp-10h]@1 + HKEY phkResult; // [sp+14h] [bp-Ch]@1 + HKEY v8; // [sp+18h] [bp-8h]@1 + HKEY v9; // [sp+1Ch] [bp-4h]@1 + + Str = pString; + lpValueName = pKey; + v9 = 0; + v8 = 0; + hKey = 0; + phkResult = 0; + if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ | KEY_WOW64_32KEY, &hKey)) + { + if (!RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition)) + { + if (!RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition)) + { + if (!RegCreateKeyExA(v8, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v9, &dwDisposition)) + { + v2 = strlen(Str); + RegSetValueExA(v9, lpValueName, 0, 1, (const BYTE *)Str, v2 + 1); + RegCloseKey(v9); + } + RegCloseKey(v8); + } + RegCloseKey(phkResult); + } + RegCloseKey(hKey); + } +} + + +//----- (00464BEF) -------------------------------------------------------- +void ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue) +{ + //LSTATUS (__stdcall *v4)(HKEY); // esi@1 + LSTATUS result; // eax@7 + DWORD Type; // [sp+Ch] [bp-24h]@5 + LPCSTR lpValueName; // [sp+10h] [bp-20h]@1 + DWORD cbData; // [sp+14h] [bp-1Ch]@1 + LPBYTE Dest; // [sp+18h] [bp-18h]@1 + DWORD dwDisposition; // [sp+1Ch] [bp-14h]@2 + HKEY phkResult; // [sp+20h] [bp-10h]@1 + HKEY hKey; // [sp+24h] [bp-Ch]@1 + HKEY v13; // [sp+28h] [bp-8h]@1 + HKEY v14; // [sp+2Ch] [bp-4h]@1 + + cbData = uBufLen; + Dest = (LPBYTE)pOutString; + lpValueName = pKeyName; + v14 = 0; + v13 = 0; + hKey = 0; + phkResult = 0; + result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); + if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ | KEY_WOW64_32KEY, &hKey)) + { + if (!RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition)) + { + if (!RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v13, &dwDisposition)) + { + if (!RegCreateKeyExA(v13, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v14, &dwDisposition)) + { + if (RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData)) + GetLastError(); + RegCloseKey(v14); + v14 = NULL; + } + RegCloseKey(v13); + v13 = NULL; + } + RegCloseKey(phkResult); + phkResult = NULL; + } + RegCloseKey(hKey); + hKey = NULL; + } +} + +//----- (00464D32) -------------------------------------------------------- +void WriteWindowsRegistryInt(const char *pKey, int val) +{ + const char *lpValueName; // [sp+4h] [bp-1Ch]@1 + BYTE Data[4]; // [sp+8h] [bp-18h]@1 + DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 + HKEY hKey; // [sp+10h] [bp-10h]@1 + HKEY phkResult; // [sp+14h] [bp-Ch]@1 + HKEY v7; // [sp+18h] [bp-8h]@1 + HKEY v8; // [sp+1Ch] [bp-4h]@1 + + *(int *)Data = val; + lpValueName = pKey; + v8 = 0; + v7 = 0; + hKey = 0; + phkResult = 0; + if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ | KEY_WOW64_32KEY, &hKey)) + { + if (!RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition)) + { + if (!RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v7, &dwDisposition)) + { + if (!RegCreateKeyExA(v7, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition)) + { + RegSetValueExA(v8, lpValueName, 0, 4, Data, 4); + RegCloseKey(v8); + } + RegCloseKey(v7); + } + RegCloseKey(phkResult); + } + RegCloseKey(hKey); + } } \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 OSAPI.h --- a/OSAPI.h Mon Mar 07 03:48:40 2016 +0200 +++ b/OSAPI.h Wed Mar 09 01:39:52 2016 +0200 @@ -1,9 +1,16 @@ +#pragma once #define WIN32_LEAN_AND_MEAN #include #include #pragma comment(lib, "winmm.lib") + +int ReadWindowsRegistryInt(const char *pKey, int uDefValue); // idb +void WriteWindowsRegistryString(const char *pKey, const char *pString); +void ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue); +void WriteWindowsRegistryInt(const char *pKey, int val); + #undef DrawText #undef PlaySound #undef Polygon \ No newline at end of file diff -r dd36326a9994 -r a76d408c5132 OSWindow.cpp --- a/OSWindow.cpp Mon Mar 07 03:48:40 2016 +0200 +++ b/OSWindow.cpp Wed Mar 09 01:39:52 2016 +0200 @@ -18,7 +18,6 @@ #include "Engine/Graphics/Viewport.h" #include "Engine/Graphics/Vis.h" #include "Media/Audio/AIL.h" -#include "Engine/Registry.h" #include "Engine/MMT.h"