# HG changeset patch # User Ritor1 # Date 1363974392 -21600 # Node ID 852ec78d95481d037b3cf19b34c42d7b64173724 # Parent 0b7a55e955f2e59bcf99a7470538e94d6278bb51# Parent 225d926209986f1112a7c4efbdaca2f9abaf8e04 Слияние diff -r 0b7a55e955f2 -r 852ec78d9548 LOD.cpp --- a/LOD.cpp Fri Mar 22 23:46:19 2013 +0600 +++ b/LOD.cpp Fri Mar 22 23:46:32 2013 +0600 @@ -2160,19 +2160,19 @@ int LODFile_Sprites::_461397() { int result; // eax@1 - int *pfield_ECA0; // edi@1 + //int *pfield_ECA0; // edi@1 int v3; // esi@1 int v4; // ecx@3 result = this->uNumLoadedSprites; - pfield_ECA0 = &this->field_ECA0; + //pfield_ECA0 = &this->field_ECA0; v3 = this->field_ECA0; this->field_ECA8 = result; if ( result < v3 ) this->field_ECA8 = v3; v4 = this->field_ECA4; if ( v3 < v4 ) - *pfield_ECA0 = v4; + field_ECA0 = v4; return result; } @@ -3051,12 +3051,9 @@ Texture *LODFile_IconsBitmaps::LoadTexturePtr(const char *pContainer, enum TEXTURE_TYPE uTextureType) { uint id = LoadTexture(pContainer, uTextureType); - if (id == -1) - { - assert(false); - Log::Warning(L"LOD error\\no container: \"%S\"", pContainer); - return nullptr; - } + + assert(id != -1 && L"Texture not found"); + return &pTextures[id]; } diff -r 0b7a55e955f2 -r 852ec78d9548 Render.cpp --- a/Render.cpp Fri Mar 22 23:46:19 2013 +0600 +++ b/Render.cpp Fri Mar 22 23:46:32 2013 +0600 @@ -8140,7 +8140,7 @@ if ( pSoftBillboard->uTintColor && this->bTinting ) { v11 = ::GetActorTintColor(dimming_level, 0, pSoftBillboard->zbuffer_depth, 0, 0); - v12 = sub_4A19D8(pSoftBillboard->uTintColor, v11); + v12 = BlendColors(pSoftBillboard->uTintColor, v11); if ( v28 ) v12 = (unsigned int)((char *)&array_77EC08[1852].pEdgeList1[17] + 3) & ((unsigned int)v12 >> 1); } @@ -8586,7 +8586,7 @@ unsigned int diffuse = ::GetActorTintColor(dimming_level, 0, a2->zbuffer_depth, 0, pBillboard); if (a2->uTintColor & 0x00FFFFFF && bTinting) { - diffuse = sub_4A19D8(a2->uTintColor, diffuse); + diffuse = BlendColors(a2->uTintColor, diffuse); if (a2->uTintColor & 0xFF000000) diffuse = 0x007F7F7F & ((unsigned int)diffuse >> 1); } diff -r 0b7a55e955f2 -r 852ec78d9548 mm7_4.cpp --- a/mm7_4.cpp Fri Mar 22 23:46:19 2013 +0600 +++ b/mm7_4.cpp Fri Mar 22 23:46:32 2013 +0600 @@ -4933,9 +4933,9 @@ //----- (004A19D8) -------------------------------------------------------- -int __fastcall sub_4A19D8(unsigned int a1, unsigned int a2) +unsigned int BlendColors(unsigned int a1, unsigned int a2) { - signed __int64 v2; // ST10_8@1 + /*signed __int64 v2; // ST10_8@1 double v3; // st7@1 float v4; // ST24_4@1 double v5; // ST10_8@1 @@ -4946,22 +4946,32 @@ float v10; // ST24_4@1 double v11; // ST10_8@1 float v12; // ST24_4@1 - double v13; // ST08_8@1 - - v2 = a1 >> 24; - v3 = (double)v2 * 0.0039215689; + double v13; // ST08_8@1*/ + + uint alpha = (uint)floorf(0.5f + (a1 >> 24) / 255.0f * + (a2 >> 24) / 255.0f * 255.0f), + red = (uint)floorf(0.5f + ((a1 >> 16) & 0xFF) / 255.0f * + ((a2 >> 16) & 0xFF) / 255.0f * 255.0f), + green = (uint)floorf(0.5f + ((a1 >> 8) & 0xFF) / 255.0f * + ((a2 >> 8) & 0xFF) / 255.0f * 255.0f), + blue = (uint)floorf(0.5f + ((a1 >> 0) & 0xFF) / 255.0f * + ((a2 >> 0) & 0xFF) / 255.0f * 255.0f); + return (alpha << 24) | (red << 16) | (green << 8) | blue; + /*v2 = a1 >> 24; + v3 = (double)v2 / 255.0f; + HIDWORD(v2) = 0; LODWORD(v2) = a2 >> 24; - v4 = v3 * (double)v2 * 0.0039215689 * 255.0; + v4 = v3 * (double)v2 / 255.0f * 255.0; v5 = v4 + 6.7553994e15; v6 = LODWORD(v5); - v7 = (double)((a1 >> 16) & 0xFFi64) * 0.0039215689 * (double)((a2 >> 16) & 0xFF) * 0.0039215689 * 255.0; + v7 = (double)((a1 >> 16) & 0xFFi64) / 255.0f * (double)((a2 >> 16) & 0xFF) * 0.0039215689 * 255.0; v8 = v7 + 6.7553994e15; v9 = LOBYTE(v8); - v10 = (double)((unsigned __int16)a1 >> 8) * 0.0039215689 * (double)((unsigned __int16)a2 >> 8) * 0.0039215689 * 255.0; + v10 = (double)((unsigned __int16)a1 >> 8) / 255.0f * (double)((unsigned __int16)a2 >> 8) / 255.0f * 255.0; v11 = v10 + 6.7553994e15; - v12 = (double)(a1 & 0xFFi64) * 0.0039215689 * (double)(unsigned __int8)a2 * 0.0039215689 * 255.0; + v12 = (double)(a1 & 0xFFi64) / 255.0f * (double)(unsigned __int8)a2 / 255.0f * 255.0; v13 = v12 + 6.7553994e15; - return LOBYTE(v13) | ((LOBYTE(v11) | (((v6 << 8) | v9) << 8)) << 8); + return LOBYTE(v13) | ((LOBYTE(v11) | (((v6 << 8) | v9) << 8)) << 8);*/ } diff -r 0b7a55e955f2 -r 852ec78d9548 mm7_data.h --- a/mm7_data.h Fri Mar 22 23:46:19 2013 +0600 +++ b/mm7_data.h Fri Mar 22 23:46:32 2013 +0600 @@ -2254,7 +2254,7 @@ unsigned int __fastcall GetMaxMipLevels(unsigned int uDim); bool __cdecl CheckTextureStages(); bool __cdecl AreRenderSurfacesOk(); -int __fastcall sub_4A19D8(unsigned int, unsigned int); // weak +unsigned int BlendColors(unsigned int c1, unsigned int c2); // weak void __cdecl DoRenderBillboards_D3D(); int __fastcall sr_4A46E6_draw_particle_segment(unsigned int x, signed int y, signed int z, int a4, unsigned int lightColor); void __cdecl Present_ColorKey();