Mercurial > might-and-magic-trilogy
changeset 56:1f161a887c69
Слияние
author | Ritor1 |
---|---|
date | Thu, 25 Oct 2012 09:02:49 +0600 |
parents | 663d5bf032d9 (current diff) fd2fd234a66c (diff) |
children | 6b3a5283b107 |
files | mm7_5.cpp |
diffstat | 14 files changed, 280 insertions(+), 351 deletions(-) [+] |
line wrap: on
line diff
--- a/GUIProgressBar.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/GUIProgressBar.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -179,13 +179,12 @@ v3 = pIconsFrameTable->GetFrame(uIconID_TurnHour, 0); pRenderer->DrawTextureTransparent(0x64u, 0x92u, &pIcons_LOD->pTextures[v3->uTextureID]); v4 = (double)(113 * uProgressCurrent) / (double)uProgressMax; - pRenderer->FillRect2( - 0, + pRenderer->FillRectFast( 174, 164, - COERCE_UNSIGNED_INT64(v4 + 6.7553994e15), + floorf(v4 + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15), 16, - LOWORD(pRenderer->uTargetRMask)); + pRenderer->uTargetRMask); goto LABEL_11; } LABEL_6:
--- a/Game.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/Game.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -136,17 +136,16 @@ } if (!pVideoPlayer->pSmackerMovie) { - GameUI_DrawMinimap(0x1E8u, 0x10u, 0x271u, 0x85u, viewparams->uMinimapZoom, pParty->uFlags & 2); + GameUI_DrawMinimap(488, 16, 625, 133, viewparams->uMinimapZoom, pParty->uFlags & 2); if (v4) { if ( !sub_4226C2() && pRenderer->pRenderD3D) - pRenderer->FillRect2( - 0, + pRenderer->FillRectFast( pViewport->uViewportX, pViewport->uViewportY, pViewport->uViewportZ - pViewport->uViewportX, pViewport->uViewportW - pViewport->uViewportY + 1, - LOWORD(pRenderer->uTargetGMask) | LOWORD(pRenderer->uTargetBMask)); + pRenderer->uTargetGMask | pRenderer->uTargetBMask); viewparams->field_48 = 0; } } @@ -827,11 +826,11 @@ signed int Game::_44ED0A(BLVFace *a2, int *a3, signed int a4) { double v4; // st7@3 - double v5; // ST00_8@3 + //double v5; // ST00_8@3 signed int v6; // eax@4 //double v7; // ST00_8@5 signed int result; // eax@7 - double v9; // ST00_8@8 + //double v9; // ST00_8@8 //double v10; // ST00_8@10 float v11; // [sp+14h] [bp+8h]@3 float v12; // [sp+18h] [bp+Ch]@3 @@ -845,8 +844,8 @@ v11 = v4; *a3 |= 2u; v12 = (1.0 - this->_E28_timed_gamma_strength) * v4; - v5 = v12 + 6.7553994e15; - if ( SLODWORD(v5) >= 0 ) + //v5 = v12 + 6.7553994e15; + if (floorf(v12 + 0.5f)/* SLODWORD(v5)*/ >= 0 ) { v13 = (1.0 - this->_E28_timed_gamma_strength) * v11; //v7 = v13 + 6.7553994e15; @@ -860,8 +859,8 @@ if ( a4 >= v6 ) { v14 = (1.0 - _E28_timed_gamma_strength) * v11; - v9 = v14 + 6.7553994e15; - if ( SLODWORD(v9) >= 0 ) + //v9 = v14 + 6.7553994e15; + if (floorf(v14 + 0.5f)/* SLODWORD(v9)*/ >= 0 ) { v15 = (1.0 - _E28_timed_gamma_strength) * v11; //v10 = v15 + 6.7553994e15;
--- a/Indoor.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/Indoor.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -1733,7 +1733,7 @@ pAllocator->FreeChunk(v1->pLights); pAllocator->FreeChunk(v1->pDoors); pAllocator->FreeChunk(v1->pNodes); - pAllocator->FreeChunk(v1->pMapVertices); + pAllocator->FreeChunk(v1->pMapOutlines); v1->pVertices = 0; v1->pFaces = 0; v1->pFaceExtras = 0; @@ -1741,7 +1741,7 @@ v1->pLights = 0; v1->pDoors = 0; v1->pNodes = 0; - v1->pMapVertices = 0; + v1->pMapOutlines = 0; v1->bLoaded = 0; } @@ -1787,11 +1787,11 @@ v13 = v1->pNodes; v1->pDoors = (BLVDoor *)v12; v14 = pAllocator->AllocNamedChunk(v13, 0x9C40u, "L.BSP"); - v15 = v1->pMapVertices; + v15 = v1->pMapOutlines; v1->pNodes = (BSPNode *)v14; v16 = pAllocator->AllocNamedChunk(v15, 0x14824u, "L.Map"); v17 = v1->pVertices; - v1->pMapVertices = (BLVMapVertices *)v16; + v1->pMapOutlines = (BLVMapOutlines *)v16; if ( v17 && v1->pFaces && v1->pFaceExtras && v1->pSectors && v1->pLights && v1->pDoors && v1->pNodes && v16 ) { memset(v17, 90000, 0); @@ -1801,7 +1801,7 @@ memset(v1->pLights, 6400, 0); memset(v1->pDoors, 16000, 0); memset(v1->pNodes, 40000, 0); - memset(v1->pMapVertices, 84004, 0); + memset(v1->pMapOutlines, 84004, 0); result = 1; } else @@ -2461,7 +2461,7 @@ fseek(v7, v234, 0); fread(&uLastVisitDay, 1u, 0x38u, v7); fseek(v7, v223, 0); - v80 = (void **)&pMapVertices; + v80 = (void **)&pMapOutlines; fread(*v80, 4u, 1u, v7); fread((char *)*v80 + 4, 0xCu, *(int *)*v80, v7); fclose(v7); @@ -2550,6 +2550,7 @@ assert(sizeof(LayingItem) == 112); assert(sizeof(Chest) == 5324); assert(sizeof(stru123) == 0xC8); + assert(sizeof(BLVMapOutline) == 12); bLoaded = true; @@ -2835,10 +2836,10 @@ pGameLoadingUI_ProgressBar->Progress(); //v201 = (const char *)v148; - //v200 = (size_t)pMapVertices; - memcpy(&pMapVertices->uNumVertices, pData, 4); - memcpy(pMapVertices->pVertices, pData + 4, pMapVertices->uNumVertices * sizeof(Vec3_int_)); - //v149 = pMapVertices; + //v200 = (size_t)pMapOutlines; + memcpy(&pMapOutlines->uNumOutlines, pData, 4); + memcpy(pMapOutlines->pOutlines, pData + 4, pMapOutlines->uNumOutlines * sizeof(BLVMapOutline)); + //v149 = pMapOutlines; //v199 = 12 * *v149; //memcpy(v149 + 1, (const void *)(v148 + 4), v199); free(pRawBLV); @@ -2959,9 +2960,9 @@ if ( *(int *)pDest ) memcpy(_visible_outlines, v203, 875); - for (uint i = 0; i < pMapVertices->uNumVertices; ++i) + for (uint i = 0; i < pMapOutlines->uNumOutlines; ++i) { - auto pVertex = pMapVertices->pVertices + i; + auto pVertex = pMapOutlines->pOutlines + i; if ((unsigned __int8)(1 << (7 - i % 8)) & _visible_outlines[i / 8]) pVertex->uFlags |= 1; }
--- a/Indoor.h Wed Oct 24 17:55:45 2012 +0600 +++ b/Indoor.h Thu Oct 25 09:02:49 2012 +0600 @@ -238,7 +238,7 @@ /* 101 */ #pragma pack(push, 1) -struct BLVMapVertex +struct BLVMapOutline { unsigned __int16 uVertex1ID; unsigned __int16 uVertex2ID; @@ -373,10 +373,10 @@ #pragma pack(push, 1) -struct BLVMapVertices +struct BLVMapOutlines { - uint uNumVertices; - BLVMapVertex pVertices[1]; + uint uNumOutlines; + BLVMapOutline pOutlines[1]; }; #pragma pack(pop) @@ -411,7 +411,7 @@ pLights = 0; pDoors = 0; pNodes = 0; - pMapVertices = 0; + pMapOutlines = 0; uNumSpawnPoints = 0; pSpawnPoints = 0; } @@ -447,7 +447,7 @@ struct BLVDoor *pDoors; unsigned int uNumNodes; struct BSPNode *pNodes; - BLVMapVertices *pMapVertices; + BLVMapOutlines *pMapOutlines; unsigned __int16 *ptr_2AC; unsigned __int16 *ptr_0002B0_sector_rdata; unsigned __int16 *ptr_0002B4_doors_ddata;
--- a/IndoorCameraD3D.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/IndoorCameraD3D.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -1225,10 +1225,10 @@ { char *v8; // eax@2 signed int v9; // ecx@2 - bool result; // eax@5 + //bool result; // eax@5 int v11; // ecx@5 - signed int v12; // ecx@6 - char *v13; // esi@6 + //signed int v12; // ecx@6 + //char *v13; // esi@6 RenderVertexSoft *v14; // eax@8 RenderVertexSoft *v15; // edx@8 Vec3_float_ a5; // [sp+18h] [bp-3Ch]@12 @@ -1236,7 +1236,7 @@ int v18; // [sp+48h] [bp-Ch]@5 //stru9 *thisa; // [sp+4Ch] [bp-8h]@1 int a7a; // [sp+53h] [bp-1h]@5 - bool a6a; // [sp+70h] [bp+1Ch]@5 + //bool a6a; // [sp+70h] [bp+1Ch]@5 v17 = 0.0; //thisa = pGame->pStru9Instance; @@ -1244,23 +1244,20 @@ static RenderVertexSoft sr_vertices_50D9D8[64]; - result = 0; - LOBYTE(a7a) = 0; + //result = 0; + a7a = 0; v11 = 2 * (a6 == 0) + 1; - a6a = 0; + //a6a = 0; v18 = v11; if ( uNumVertices <= 0 ) - { -LABEL_14: - LOBYTE(result) = a7a; - } - else - { - v12 = *pOutNumVertices; - v13 = (char *)&a4->y; + return false; + + //v12 = *pOutNumVertices; + //v13 = (char *)&a4->y; + uint i = 0; while ( 1 ) { - if ( result % 2 ) + if (i % 2 ) { v14 = a1; v15 = sr_vertices_50D9D8; @@ -1270,27 +1267,24 @@ v15 = a1; v14 = sr_vertices_50D9D8; } - ++a6a; - if ( a6a == uNumVertices ) + ++i; + if (i == uNumVertices ) v14 = pVertices; - a5.x = *((float *)v13 - 1); - a5.y = *(float *)v13; - a5.z = *((float *)v13 + 1); - result = pGame->pStru9Instance->_4985FB(v15, v12, v14, pOutNumVertices, &a5, *((float *)v13 + 2), (char *)&a7a, _unused); - v12 = *pOutNumVertices; + a5.x = a4[i].x; + a5.y = a4[i].y; + a5.z = a4[i].z; + pGame->pStru9Instance->_4985FB(v15, *pOutNumVertices, v14, pOutNumVertices, &a5, a4[i].dot, (char *)&a7a, _unused); + //v12 = *pOutNumVertices; if ( (signed int)*pOutNumVertices < v18 ) break; - result = a6a; - v13 += 24; - if ( a6a >= uNumVertices ) - goto LABEL_14; + //result = a6a; + //v13 += 24; + if (i >= uNumVertices) + return a7a; } *pOutNumVertices = 0; - LOBYTE(result) = 1; - } - return result; + return true; } -// 50E5D8: using guessed type char static_50D9D8_init_flag_bit1; //----- (004371C3) -------------------------------------------------------- bool IndoorCameraD3D::_4371C3(RenderVertexSoft *pVertices, unsigned int *pOutNumVertices, int _unused)
--- a/Party.h Wed Oct 24 17:55:45 2012 +0600 +++ b/Party.h Thu Oct 25 09:02:49 2012 +0600 @@ -148,6 +148,9 @@ static void TakeFood(unsigned int uNumFood); static __int16 GiveFood(unsigned int _this); + inline bool WizardEyeActive() {return pPartyBuffs[PARTY_BUFF_WIZARD_EYE].uExpireTime > 0;} + inline int WizardEyeSkillLevel() {return pPartyBuffs[PARTY_BUFF_WIZARD_EYE].uSkill;} + int field_0; unsigned int uPartyHeight;
--- a/Render.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/Render.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -6139,7 +6139,7 @@ //----- (004A0BEE) -------------------------------------------------------- -char Render::FillRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor) +char Render::Line2D(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor) { int v6; // edi@1 int v7; // edx@5 @@ -9618,52 +9618,20 @@ //----- (004A6D87) -------------------------------------------------------- -void Render::FillRect2(int uX, int uY, int a4, unsigned int a5, int a6, unsigned __int16 a7) -{ - Render *v7; // esi@1 - void *v8; // edx@2 - unsigned int v9; // ecx@3 - unsigned __int8 v10; // cf@5 - unsigned int v11; // ecx@5 - unsigned __int16 *v12; // edi@5 - int i; // ecx@5 - char v14; // zf@9 - int v15; // [sp+10h] [bp+Ch]@3 - - auto a1 = this; - v7 = a1; - if ( a1->uNumSceneBegins ) - { - v8 = &a1->pTargetSurface[uY + a4 * a1->uTargetSurfacePitch]; - if ( a6 > 0 ) - { - v9 = a5; - v15 = a6; - do - { - if ( (signed int)v9 > 0 ) - { - LOWORD(uX) = a7; - uX <<= 16; - LOWORD(uX) = a7; - v10 = v9 & 1; - v11 = v9 >> 1; - memset32(v8, uX, v11); - v12 = (unsigned __int16 *)((char *)v8 + 4 * v11); - for ( i = v10; i; --i ) - { - *v12 = a7; - ++v12; - } - v9 = a5; - v8 = (char *)v8 + 2 * a5; - } - v14 = v15-- == 1; - v8 = (char *)v8 + 2 * (v7->uTargetSurfacePitch - v9); - } - while ( !v14 ); - } - } +void Render::FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16) +{ + if (!uNumSceneBegins) + return; + + unsigned __int32 twoColors = (uColor16 << 16) | uColor16; + for (uint y = 0; y < uHeight; ++y) + { + auto pDst = &pTargetSurface[uX + (y + uY) * uTargetSurfacePitch]; + + memset32(pDst, twoColors, uWidth / 2); + if (uWidth & 1) + pDst[uWidth - 1] = uColor16; + } }
--- a/Render.h Wed Oct 24 17:55:45 2012 +0600 +++ b/Render.h Thu Oct 25 09:02:49 2012 +0600 @@ -277,7 +277,7 @@ void CreateSomeTexture(); bool InitializeFullscreen(HWND hWnd); bool SwitchToWindow(HWND hWnd); - char FillRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor); + char Line2D(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor); void ClearZBuffer(int a2, int a3); void Clip_v2(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW); void ParseTargetPixelFormat(); @@ -339,7 +339,7 @@ void _4A6A68(unsigned int a2, unsigned int a3, Texture *a4, __int16 height); void DrawTextPalette(int x, int y, int a4, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, int a8); 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); - void FillRect2(int uX, int uY, int a4, unsigned int a5, int a6, unsigned __int16 a7); + void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16); int _4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, unsigned __int16 *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7); void _4A6E7E(unsigned int a2, unsigned int a3, Texture *a4); char DrawBuildingsD3D();
--- a/mm7_1.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/mm7_1.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -3101,15 +3101,15 @@ v106.sZValue = 0; v106.uFlags = 0; pRenderer->Clip_v2(0, 0, 0x27Fu, 0x1DFu); - pRenderer->FillRect(v106.uViewportX - 1, v106.uViewportY - 1, v106.uViewportX + 129, v106.uViewportY - 1, a5); - pRenderer->FillRect( + pRenderer->Line2D(v106.uViewportX - 1, v106.uViewportY - 1, v106.uViewportX + 129, v106.uViewportY - 1, a5); + pRenderer->Line2D( v106.uViewportX + 129, v106.uViewportY - 1, v106.uViewportX + 129, v106.uViewportW + 1, a5); - pRenderer->FillRect(v106.uViewportX + 129, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportW + 1, a5); - pRenderer->FillRect(v106.uViewportX - 1, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportY - 1, a5); + pRenderer->Line2D(v106.uViewportX + 129, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportW + 1, a5); + pRenderer->Line2D(v106.uViewportX - 1, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportY - 1, a5); if ( pRenderer->pRenderD3D ) { v13 = &pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]]; @@ -3150,20 +3150,18 @@ v116 = v106.uViewportZ; if ( v119 > (signed int)v106.uViewportW ) v119 = v106.uViewportW; - pRenderer->FillRect2( - 0, + pRenderer->FillRectFast( v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, - LOWORD(pRenderer->uTargetBMask) | LOWORD(pRenderer->uTargetGMask)); - pRenderer->FillRect2( - 0, + pRenderer->uTargetBMask | pRenderer->uTargetGMask); + pRenderer->FillRectFast( v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, - LOWORD(pRenderer->uTargetBMask) | LOWORD(pRenderer->uTargetGMask)); + pRenderer->uTargetBMask | pRenderer->uTargetGMask); v84.left = v106.uViewportX; v84.top = v106.uViewportY; v84.right = v106.uViewportZ; @@ -3269,8 +3267,7 @@ } else { - pRenderer->FillRect2( - 0, + pRenderer->FillRectFast( v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX,
--- a/mm7_2.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/mm7_2.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -3450,13 +3450,12 @@ pRenderer->DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene(); pRenderer->BeginScene(); if ( pRenderer->pRenderD3D ) - pRenderer->FillRect2( - 1, + pRenderer->FillRectFast( pViewport->uViewportX, pViewport->uViewportY, pViewport->uViewportZ - pViewport->uViewportX, pViewport->uViewportW - pViewport->uViewportY + 1, - LOWORD(pRenderer->uTargetGMask) | LOWORD(pRenderer->uTargetBMask)); + pRenderer->uTargetGMask | pRenderer->uTargetBMask); auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : nullptr); pRenderer->_4A6A68( @@ -13087,8 +13086,8 @@ char *v3; // eax@1 //char *v4; // eax@1 unsigned int v5; // eax@3 - size_t v6; // ecx@10 - char *v7; // eax@11 + //size_t v6; // ecx@10 + //char *v7; // eax@11 char Str1[20]; // [sp+Ch] [bp-18h]@1 unsigned int v9; // [sp+20h] [bp-4h]@1 @@ -13128,20 +13127,13 @@ sub_461103(); if ( !_strcmpi(pCurrentMapName, "d11.blv") || !_strcmpi(pCurrentMapName, "d10.blv") ) { - __debugbreak(); - v6 = uNumActors; - if ( (signed int)uNumActors > 0 ) - { - v7 = (char *)&pActors[0].pMonsterInfo.uTreasureType; - do - { - *v7 = 0; - *(v7 - 3) = 0; - *(int *)(v7 + 59) = 0; - v7 += 836; - --v6; - } - while ( v6 ); + //spawning grounds & good analogue - no loot & exp from monsters + + for (uint i = 0; i < uNumActors; ++i) + { + pActors[i].pMonsterInfo.uTreasureType = 0; + pActors[i].pMonsterInfo.uTreasureDiceRolls = 0; + pActors[i].pMonsterInfo.uExp = 0; } } bDialogueUI_InitializeActor_NPC_ID = 0;
--- a/mm7_3.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/mm7_3.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -4733,6 +4733,7 @@ } //----- (00476395) -------------------------------------------------------- +//0x26 Wizard eye at skill level 2 bool __thiscall CheckHiredNPCSpeciality(unsigned int uProfession) { bool result; // eax@2 @@ -13690,28 +13691,23 @@ //----- (00441D38) -------------------------------------------------------- -void __fastcall GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags) -{ - int v6; // ebx@6 - BLVFace *v7; // eax@8 - unsigned int *v8; // edi@9 - unsigned int v9; // edx@9 - unsigned int v10; // ebx@10 +void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags) +{ + int uHeight; // ebx@6 + //unsigned int v9; // edx@9 + //unsigned int v10; // ebx@10 __int16 v11; // cx@11 - int v12; // ecx@17 - unsigned int v13; // ecx@21 + //BLVFace *v12; // ecx@17 + //unsigned int v13; // ecx@21 unsigned int v14; // ebx@23 int v15; // eax@23 - unsigned int *v16; // ecx@28 + //unsigned int *v16; // ecx@28 __int16 v17; // di@30 double v18; // st7@30 float v19; // ST38_4@30 double v20; // st7@30 double v21; // st6@30 double v22; // st5@33 - float v23; // ST3C_4@37 - double v24; // ST20_8@37 - double v25; // ST20_8@37 unsigned __int16 *v26; // edx@37 signed int v27; // eax@37 unsigned __int16 *v28; // ecx@37 @@ -13761,30 +13757,23 @@ signed int uBluea; // [sp+28h] [bp-2Ch]@37 int v73; // [sp+2Ch] [bp-28h]@30 unsigned __int8 *v74; // [sp+30h] [bp-24h]@30 - signed int v75; // [sp+34h] [bp-20h]@4 int v76; // [sp+34h] [bp-20h]@91 int v77; // [sp+34h] [bp-20h]@108 signed int v78; // [sp+38h] [bp-1Ch]@37 int v79; // [sp+38h] [bp-1Ch]@72 - bool v80; // [sp+3Ch] [bp-18h]@2 - unsigned int a2; // [sp+40h] [bp-14h]@1 - int a2a; // [sp+40h] [bp-14h]@8 signed int a2b; // [sp+40h] [bp-14h]@41 char *a2c; // [sp+40h] [bp-14h]@68 - unsigned int a3; // [sp+44h] [bp-10h]@1 int a3a; // [sp+44h] [bp-10h]@40 - signed int uHeight; // [sp+48h] [bp-Ch]@1 - signed int uWidth; // [sp+4Ch] [bp-8h]@1 - signed int uZa; // [sp+5Ch] [bp+8h]@7 + signed int uCenterY; // [sp+48h] [bp-Ch]@1 + signed int uCenterX; // [sp+4Ch] [bp-8h]@1 signed int uZb; // [sp+5Ch] [bp+8h]@27 - signed int uZc; // [sp+5Ch] [bp+8h]@30 + signed int uWidth; // [sp+5Ch] [bp+8h]@30 signed int uZd; // [sp+5Ch] [bp+8h]@45 signed int uZe; // [sp+5Ch] [bp+8h]@67 signed int uZf; // [sp+5Ch] [bp+8h]@85 signed int uZg; // [sp+5Ch] [bp+8h]@105 unsigned int uWa; // [sp+60h] [bp+Ch]@23 float uWb; // [sp+60h] [bp+Ch]@30 - float uWe; // [sp+60h] [bp+Ch]@37 unsigned __int16 *uWc; // [sp+60h] [bp+Ch]@37 unsigned int uWd; // [sp+60h] [bp+Ch]@95 float uZooma; // [sp+64h] [bp+10h]@117 @@ -13793,25 +13782,26 @@ char *flagsc; // [sp+68h] [bp+14h]@86 unsigned int flagsd; // [sp+68h] [bp+14h]@105 - a3 = uY; - a2 = uX; - uWidth = (signed int)(uX + uZ) >> 1; - uHeight = (signed int)(uY + uW) >> 1; + //a3 = uY; + //a2 = uX; + uCenterX = (uX + uZ) / 2; + uCenterY = (uY + uW) / 2; lPitch = pRenderer->uTargetSurfacePitch; GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0); uBlue = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0xFFu); - v80 = (signed __int64)pParty->pPartyBuffs[19].uExpireTime > 0; - v75 = pParty->pPartyBuffs[19].uSkill; - if ( CheckHiredNPCSpeciality(0x26u) ) - { - v80 = 1; - v75 = 2; - } - pRenderer->Clip_v2(a2, a3, uZ - 1, uW - 1); - v6 = uW - a3; + auto bWizardEyeActive = pParty->WizardEyeActive(); + auto uWizardEyeSkillLevel = pParty->WizardEyeSkillLevel(); + if (CheckHiredNPCSpeciality(0x26u)) + { + bWizardEyeActive = true; + uWizardEyeSkillLevel = 2; + } + pRenderer->Clip_v2(uX, uY, uZ - 1, uW - 1); + uHeight = uW - uY; + uWidth = uZ - uX; + if ( uCurrentlyLoadedLevelType != LEVEL_Indoor) { - uZc = uZ - a2; v17 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2; v74 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0; v62 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16; @@ -13823,54 +13813,54 @@ uWb = v21; if ( uZoom == 512 ) { - v20 = v20 - (double)(uZc / 2); - v22 = (double)(v6 / 2); + v20 = v20 - (double)(uWidth / 2); + v22 = (double)(uHeight / 2); } else { if ( uZoom == 1024 ) { - v20 = v20 - (double)(uZc / 4); - v22 = (double)(v6 / 4); + v20 = v20 - (double)(uWidth / 4); + v22 = (double)(uHeight / 4); } else { if ( uZoom != 2048 ) goto LABEL_37; - v20 = v20 - (double)(uZc / 8); - v22 = (double)(v6 / 8); + v20 = v20 - (double)(uWidth / 8); + v22 = (double)(uHeight / 8); } } uWb = v21 - v22; LABEL_37: - v23 = v20 * 65536.0; - v24 = v23 + 6.7553994e15; - v70 = LODWORD(v24); - uWe = uWb * 65536.0; - v25 = uWe + 6.7553994e15; + //v23 = v20 * 65536.0; + //v24 = v23 + 6.7553994e15; + v70 = floorf(v20 * 65536.0 + 0.5f);//LODWORD(v24); + //uWe = uWb * 65536.0; + //v25 = uWe + 6.7553994e15; v78 = v70; - uBluea = LODWORD(v25); + uBluea = floorf(uWb * 65536.0 + 0.5f);//LODWORD(v25); v26 = (unsigned __int16 *)_56EFD8_minimap; - v27 = SLODWORD(v25) >> 16; + v27 = uBluea >> 16; uWc = (unsigned __int16 *)_56EFD8_minimap; - v28 = &pRenderer->pTargetSurface[a2 + a3 * lPitch]; + v28 = &pRenderer->pTargetSurface[uX + uY * lPitch]; if ( flags ) { if ( v74 ) { v64 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth; - if ( v6 > 0 ) - { - a3a = v6; + if ( uHeight > 0 ) + { + a3a = uHeight; v29 = v70 >> 16; do { a2b = 0; - if ( uZc > 0 ) + if ( uWidth > 0 ) { v30 = (int)&v74[v27 * v64]; - flagsa = uZc; - a2b = uZc; + flagsa = uWidth; + a2b = uWidth; do { v31 = uWc; @@ -13910,102 +13900,91 @@ } while ( uZd ); uNumBlueFacesInBLVMinimap = 0; - goto LABEL_50; - } - pRenderer->FillRect2(v6, a2, a3, uZ - a2, v6, 0xFu); - uNumBlueFacesInBLVMinimap = 0; - uZa = 0; - if ( (signed int)pIndoor->pMapVertices->uNumVertices > 0 ) - { - a2a = 0; - v7 = pIndoor->pFaces; - while ( 1 ) - { - v8 = (uint *)&pIndoor->pMapVertices->pVertices[a2a]; - v9 = v7[LOWORD(pIndoor->pMapVertices[a2a + 2])].uAttributes; - if ( !(BYTE1(v9) & 0x20) ) - { - v10 = v7[HIWORD(pIndoor->pMapVertices[a2a + 2])].uAttributes; - if ( !(BYTE1(v10) & 0x20) ) - { - v11 = HIWORD(pIndoor->pMapVertices[a2a + 3]); + } + else + { + pRenderer->FillRectFast(uX, uY, uZ - uX, uHeight, 0xF); + uNumBlueFacesInBLVMinimap = 0; + + for (uint i = 0; i < pIndoor->pMapOutlines->uNumOutlines; ++i) + { + auto pOutline = &pIndoor->pMapOutlines->pOutlines[i]; + + auto pFace1 = pIndoor->pFaces + pOutline->uFace1ID; + auto pFace2 = pIndoor->pFaces + pOutline->uFace2ID; + //v9 = pIndoor->pFaces[pMapVertex->uFace1ID].uAttributes; + if (~pFace1->uAttributes & 0x2000) + { + //v10 = pIndoor->pFaces[pMapVertex->uFace2ID].uAttributes; + if (~pFace2->uAttributes & 0x2000) + { + v11 = pOutline->uFlags; if ( v11 & 1 ) goto LABEL_15; - if ( (v9 & 0x80u) != 0 || (v10 & 0x80u) != 0 ) - break; - } - } -LABEL_26: - ++uZa; - a2a += 3; - if ( uZa >= (signed int)pIndoor->pMapVertices->uNumVertices ) - goto LABEL_27; - } - HIWORD(pIndoor->pMapVertices[a2a + 3]) = v11 | 1; - pIndoor->_visible_outlines[uZa >> 3] |= 1 << (7 - uZa % 8); - v7 = pIndoor->pFaces; + if (pFace1->uAttributes & 0x80 || pFace2->uAttributes & 0x80u != 0 ) + goto LABEL_ABC; + } + } + continue; + +LABEL_ABC: + pOutline->uFlags = v11 | 1; + pIndoor->_visible_outlines[i >> 3] |= 1 << (7 - i % 8); + LABEL_15: - if ( v80 - && v75 >= 3 - && ((v12 = (int)&v7[*((short *)v8 + 2)], *(int *)(v12 + 44) & 0x2000000) - || v7[*((short *)v8 + 3)].uAttributes & 0x2000000) - && (pIndoor->pFaceExtras[*(short *)(v12 + 72)].uEventID - || pIndoor->pFaceExtras[v7[*((short *)v8 + 3)].uFaceExtraID].uEventID) - && (v13 = uNumBlueFacesInBLVMinimap, (signed int)uNumBlueFacesInBLVMinimap < 49) ) - { - pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap] = uZa; - uNumBlueFacesInBLVMinimap = v13 + 1; - } - else - { - v69 = uWidth - + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*(short *)v8].x) >> 16) << 16) + //v12 = &pIndoor->pFaces[pOutline->uFace1ID]; + if (bWizardEyeActive && uWizardEyeSkillLevel >= 3 && + (pFace1->uAttributes & 0x2000000 || pFace2->uAttributes & 0x2000000) && + (pIndoor->pFaceExtras[pFace1->uFaceExtraID].uEventID || pIndoor->pFaceExtras[pFace2->uFaceExtraID].uEventID)) + { + if (uNumBlueFacesInBLVMinimap < 49) + pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap++] = i; + } + else + { + v69 = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); - lPitcha = uHeight - - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*(short *)v8].y) >> 16) << 16) + lPitcha = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) - uZoom * pParty->vPosition.z) >> 16); - uWa = uWidth - + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*((short *)v8 + 1)].x) >> 16) << 16) + uWa = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); - v14 = uHeight - - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*((short *)v8 + 1)].y) >> 16) << 16) + v14 = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) - uZoom * pParty->vPosition.z) >> 16); - v15 = abs(*((short *)v8 + 4) - pParty->vPosition.y) / 8; + v15 = abs(pOutline->sZ - pParty->vPosition.y) / 8; if ( v15 > 100 ) v15 = 100; - pRenderer->FillRect(v69, lPitcha, uWa, v14, viewparams->pPalette[-v15 + 200]); - v7 = pIndoor->pFaces; - } - goto LABEL_26; - } -LABEL_27: + pRenderer->Line2D(v69, lPitcha, uWa, v14, viewparams->pPalette[-v15 + 200]); + } + } + + for ( uZb = 0; uZb < (signed int)uNumBlueFacesInBLVMinimap; ++uZb ) { - v16 = (uint *)&pIndoor->pMapVertices->pVertices[3 * pBlueFacesInBLVMinimapIDs[uZb]]; - pRenderer->FillRect( - uWidth + //v16 = (uint *)&pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[uZb]]; + auto pOutline = &pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[uZb]]; + pRenderer->Line2D( + uCenterX + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*(short *)v16].x) >> 16) << 16) + * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16), - uHeight + uCenterY - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[*(short *)v16].y) >> 16) << 16) + * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) - uZoom * pParty->vPosition.z) >> 16), - uWidth + uCenterX + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[HIWORD(pIndoor->pMapVertices[3 * pBlueFacesInBLVMinimapIDs[uZb] + 1])].x) >> 16) << 16) + * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16), - uHeight + uCenterY - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom - * (signed __int64)pIndoor->pVertices[HIWORD(pIndoor->pMapVertices[3 * pBlueFacesInBLVMinimapIDs[uZb] + 1])].y) >> 16) << 16) + * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) - uZoom * pParty->vPosition.z) >> 16), uBlue); } -LABEL_50: + } + + +//_draw_party_arrow: v33 = 0; v34 = pParty->sRotationY & stru_5C6E00->uDoublePiMask; v35 = 0; @@ -14057,13 +14036,13 @@ v35 = v57; LABEL_66: pRenderer->DrawTextureTransparent( - uWidth - 3, - uHeight - 3, + uCenterX - 3, + uCenterY - 3, (Texture *)(pTextureIDs_pMapDirs[v35] != -1 ? (int)&pIcons_LOD->pTextures[pTextureIDs_pMapDirs[v35]] : 0)); v36 = 255; flagsb = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0xFFu); v60 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0); - if ( v80 ) + if ( bWizardEyeActive ) { uZe = 0; if ( (signed int)uNumLayingItems > 0 ) @@ -14073,11 +14052,11 @@ { if ( !*((short *)a2c - 1) || !*(short *)a2c - || v75 == 1 + || uWizardEyeSkillLevel == 1 || (v37 = ((unsigned __int64)((*(int *)(a2c + 2) - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16) - + uWidth, + + uCenterX, v79 = (unsigned __int64)((*(int *)(a2c + 6) - pParty->vPosition.z) * (signed __int64)(signed int)uZoom) >> 16, - v38 = uHeight - v79, + v38 = uCenterY - v79, v37 < pRenderer->field_1C_clipx) || v37 > pRenderer->field_24_clipz || v38 < pRenderer->field_20_clipy @@ -14087,22 +14066,22 @@ break; if ( (signed int)uZoom > 512 ) { - pRenderer->FillRect(v37 - 1, v38 - 1, v37 - 1, v38 + 1, flagsb); - pRenderer->FillRect(v37, v38 - 2, v37, v38 + 1, flagsb); - pRenderer->FillRect(v37 + 1, v38 - 1, v37 + 1, v38 + 1, flagsb); - pRenderer->FillRect(v37 - 2, v38, v37 - 2, v38 + 1, flagsb); + pRenderer->Line2D(v37 - 1, v38 - 1, v37 - 1, v38 + 1, flagsb); + pRenderer->Line2D(v37, v38 - 2, v37, v38 + 1, flagsb); + pRenderer->Line2D(v37 + 1, v38 - 1, v37 + 1, v38 + 1, flagsb); + pRenderer->Line2D(v37 - 2, v38, v37 - 2, v38 + 1, flagsb); v37 += 2; v58 = flagsb; v55 = v38 + 1; goto LABEL_81; } - pRenderer->FillRect(v37 - 1, v38 - 1, v37 - 1, uHeight - v79, flagsb); + pRenderer->Line2D(v37 - 1, v38 - 1, v37 - 1, uCenterY - v79, flagsb); v58 = flagsb; - v55 = uHeight - v79; + v55 = uCenterY - v79; v53 = v37; v51 = v38 - 1; LABEL_82: - pRenderer->FillRect(v37, v51, v53, v55, v58); + pRenderer->Line2D(v37, v51, v53, v55, v58); LABEL_83: ++uZe; a2c += 112; @@ -14114,10 +14093,10 @@ } } v58 = v60; - v55 = uHeight - v79; + v55 = uCenterY - v79; LABEL_81: v53 = v37; - v51 = uHeight - v79; + v51 = uCenterY - v79; goto LABEL_82; } LABEL_85: @@ -14135,10 +14114,10 @@ { v40 = ((unsigned __int64)(((signed int)*((short *)flagsc - 17) - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16) - + uWidth; + + uCenterX; v76 = (unsigned __int64)(((signed int)*((short *)flagsc - 16) - pParty->vPosition.z) * (signed __int64)(signed int)uZoom) >> 16; - v41 = uHeight - v76; + v41 = uCenterY - v76; if ( v40 >= pRenderer->field_1C_clipx ) { if ( v40 <= pRenderer->field_24_clipz && v41 >= pRenderer->field_20_clipy && v41 <= pRenderer->field_28_clipw ) @@ -14150,13 +14129,13 @@ uWd = v65; if ( (signed int)uZoom > 1024 ) { - pRenderer->FillRect(v40 - 1, v41 - 2, v40 - 1, v41 + 2, uWd); - pRenderer->FillRect(v40, v41 - 2, v40, v41 + 2, uWd); - pRenderer->FillRect(v40 + 1, v41 - 2, v40 + 1, v41 + 2, uWd); + pRenderer->Line2D(v40 - 1, v41 - 2, v40 - 1, v41 + 2, uWd); + pRenderer->Line2D(v40, v41 - 2, v40, v41 + 2, uWd); + pRenderer->Line2D(v40 + 1, v41 - 2, v40 + 1, v41 + 2, uWd); v42 = v41 + 1; v43 = v41 - 1; v44 = v42; - pRenderer->FillRect(v40 - 2, v43, v40 - 2, v42, uWd); + pRenderer->Line2D(v40 - 2, v43, v40 - 2, v42, uWd); v40 += 2; v59 = uWd; v56 = v44; @@ -14165,13 +14144,13 @@ } else { - pRenderer->FillRect(v40 - 1, v41 - 1, v40 - 1, uHeight - v76, uWd); + pRenderer->Line2D(v40 - 1, v41 - 1, v40 - 1, uCenterY - v76, uWd); v59 = uWd; - v56 = uHeight - v76; + v56 = uCenterY - v76; v54 = v40; v52 = v41 - 1; } - pRenderer->FillRect(v40, v52, v54, v56, v59); + pRenderer->Line2D(v40, v52, v54, v56, v59); } } } @@ -14194,9 +14173,9 @@ if ( *(v45 - 2) & 8 ) { v46 = ((unsigned __int64)((*(int *)v45 - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16) - + uWidth; + + uCenterX; v77 = (unsigned __int64)((*((int *)v45 + 1) - pParty->vPosition.z) * (signed __int64)(signed int)uZoom) >> 16; - v47 = uHeight - v77; + v47 = uCenterY - v77; if ( v46 >= pRenderer->field_1C_clipx ) { if ( v46 <= pRenderer->field_24_clipz && v47 >= pRenderer->field_20_clipy && v47 <= pRenderer->field_28_clipw ) @@ -14205,14 +14184,14 @@ { v48 = v47 + 1; v49 = v47 - 1; - pRenderer->FillRect(v46 - 1, v47 - 1, v46 - 1, v47 + 1, flagsd); - pRenderer->FillRect(v46, v49, v46, v48, flagsd); - pRenderer->FillRect(v46 + 1, v49, v46 + 1, v48, flagsd); + pRenderer->Line2D(v46 - 1, v47 - 1, v46 - 1, v47 + 1, flagsd); + pRenderer->Line2D(v46, v49, v46, v48, flagsd); + pRenderer->Line2D(v46 + 1, v49, v46 + 1, v48, flagsd); v45 = lPitchb; } else { - pRenderer->FillRect(v46, uHeight - v77, v46, uHeight - v77, flagsd); + pRenderer->Line2D(v46, uCenterY - v77, v46, uCenterY - v77, flagsd); } } } @@ -14456,10 +14435,10 @@ LABEL_8: black = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0); teal = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0xFFu); - v7 = (uint *)pIndoor->pMapVertices; + v7 = (uint *)pIndoor->pMapOutlines; uNumBlueFacesInBLVMinimap = 0; - v8 = pIndoor->pMapVertices->uNumVertices == 0; - v9 = (pIndoor->pMapVertices->uNumVertices & 0x80000000u) != 0; + v8 = pIndoor->pMapOutlines->uNumOutlines == 0; + v9 = (pIndoor->pMapOutlines->uNumOutlines & 0x80000000u) != 0; v94 = 0; if ( !(v9 | v8) ) { @@ -14496,13 +14475,13 @@ v87 = (unsigned __int64)((signed int)v92 * (signed __int64)v5) >> 16; v93 = (unsigned __int16 *)((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16); v92 = (unsigned __int64)(v20 * (signed __int64)v5) >> 16; - pRenderer->FillRect( + pRenderer->Line2D( v85 + v88, v90 - v87, v85 + ((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16), v90 - v92, black); - v7 = (uint *)pIndoor->pMapVertices; + v7 = (uint *)pIndoor->pMapOutlines; LABEL_17: ++v94; i += 12; @@ -14530,7 +14509,7 @@ v88 = (unsigned __int64)(v28 * (signed __int64)v5) >> 16; i = (unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16; v95 = (unsigned __int64)(v29 * (signed __int64)v5) >> 16; - pRenderer->FillRect( + pRenderer->Line2D( v85 + ((unsigned __int64)((signed int)v27 * (signed __int64)v5) >> 16), v90 - v88, v85 + ((unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16), @@ -14539,7 +14518,7 @@ ++v21; if ( v21 >= (signed int)uNumBlueFacesInBLVMinimap ) break; - v7 = (uint *)pIndoor->pMapVertices; + v7 = (uint *)pIndoor->pMapOutlines; } v6 = v86; } @@ -14661,8 +14640,8 @@ { v96 = v55 + 1; black = v55 - 1; - pRenderer->FillRect(v54 - 1, v55 - 1, v54 - 1, v55 + 1, v86); - pRenderer->FillRect(v54, black, v54, v96, v86); + pRenderer->Line2D(v54 - 1, v55 - 1, v54 - 1, v55 + 1, v86); + pRenderer->Line2D(v54, black, v54, v96, v86); ++v54; v74 = v86; v72 = v96; @@ -14675,7 +14654,7 @@ v71 = ((unsigned __int64)((signed int)v93 * (signed __int64)v5) >> 16) + v85; v70 = v90 - (int)v97; } - pRenderer->FillRect(v54, v70, v71, v72, v74); + pRenderer->Line2D(v54, v70, v71, v72, v74); } } } @@ -14912,11 +14891,11 @@ v14 = 0x40000000u; v17 = 0xC0000000u; v15 = 0xC0000000u; - if ( (signed int)pIndoor->pMapVertices->uNumVertices > 0 ) - { - v2 = (__int16 *)(pIndoor->pMapVertices->pVertices); - v11 = pIndoor->pMapVertices->uNumVertices; - v12 = (uint *)pIndoor->pMapVertices->pVertices; + if ( (signed int)pIndoor->pMapOutlines->uNumOutlines > 0 ) + { + v2 = (__int16 *)(pIndoor->pMapOutlines->pOutlines); + v11 = pIndoor->pMapOutlines->uNumOutlines; + v12 = (uint *)pIndoor->pMapOutlines->pOutlines; do { v3 = &pIndoor->pVertices[*v2];
--- a/mm7_5.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/mm7_5.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -12070,14 +12070,14 @@ if ( bSolidFill ) { for ( i = v3->y; (signed int)i <= v3->w; ++i ) - pRenderer->FillRect(v3->x, i, v3->z, i, v4); - } - else - { - pRenderer->FillRect(v3->x, v3->y, v3->z, v3->y, v4); - pRenderer->FillRect(v3->z, v3->y, v3->z, v3->w, v4); - pRenderer->FillRect(v3->z, v3->w, v3->x, v3->w, v4); - pRenderer->FillRect(v3->x, v3->w, v3->x, v3->y, v4); + pRenderer->Line2D(v3->x, i, v3->z, i, v4); + } + else + { + pRenderer->Line2D(v3->x, v3->y, v3->z, v3->y, v4); + pRenderer->Line2D(v3->z, v3->y, v3->z, v3->w, v4); + pRenderer->Line2D(v3->z, v3->w, v3->x, v3->w, v4); + pRenderer->Line2D(v3->x, v3->w, v3->x, v3->y, v4); } pRenderer->EndScene(); }
--- a/mm7_data.h Wed Oct 24 17:55:45 2012 +0600 +++ b/mm7_data.h Thu Oct 25 09:02:49 2012 +0600 @@ -2787,7 +2787,7 @@ void Load_isn_spells_21_27(); void GameUI_DrawPartySpells(); __int16 __fastcall sub_441A4E(int a1); -void __fastcall GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags); +void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags); int __fastcall DrawSpellbook_Map_sub(unsigned int x, unsigned int y, unsigned int a4, int a5, int _48074); // idb int __cdecl Initialize2DA(); unsigned int __fastcall LoadEventsToBuffer(const char *pContainerName, char *a2, unsigned int uBufferSize);
--- a/stru9.cpp Wed Oct 24 17:55:45 2012 +0600 +++ b/stru9.cpp Thu Oct 25 09:02:49 2012 +0600 @@ -155,10 +155,10 @@ { RenderVertexSoft *v9; // ecx@1 Vec3_float_ *v10; // esi@1 - char *v11; // ebx@1 + //char *v11; // ebx@1 RenderVertexSoft *v12; // edi@1 double v13; // st7@1 - bool result; // eax@4 + //bool result; // eax@4 signed int v15; // edx@9 RenderVertexSoft *v16; // ecx@9 double v17; // st7@9 @@ -169,60 +169,57 @@ v9 = a1; v10 = a5; - v11 = (char *)&a1->vWorldPosition.z; + //v11 = (char *)&a1->vWorldPosition.z; + auto v11 = a1; v12 = a3; v13 = a1->vWorldPosition.y * a5->y + a5->x * a1->vWorldPosition.x + a1->vWorldPosition.z * a5->z; v20 = v13; v21 = v13 >= a6; - result = 0; + *pOutNumVertices = 0; if ( a2 <= 0 ) - goto LABEL_19; + return false; + v19 = 1; while ( 1 ) { - v19 = result + 1; if ( v21 ) { ++a3; - memcpy(v12, v11 - 8, 0x30u); + memcpy(v12, v11, sizeof(RenderVertexSoft)); ++*pOutNumVertices; v10 = a5; v12 = a3; v9 = a1; } v15 = 0; - v16 = &v9[(result + 1) % a2]; + v16 = &v9[v19 % a2]; v17 = v16->vWorldPosition.z * v10->z + v16->vWorldPosition.y * v10->y + v10->x * v16->vWorldPosition.x; if ( v17 >= a6 ) v15 = 1; if ( v21 != v15 ) { v18 = (a6 - v20) / (v17 - v20); - v12->vWorldPosition.x = (v16->vWorldPosition.x - *((float *)v11 - 2)) * v18 + *((float *)v11 - 2); + v12->vWorldPosition.x = (v16->vWorldPosition.x - v11->vWorldPosition.x) * v18 + v11->vWorldPosition.x; + v12->vWorldPosition.y = (v16->vWorldPosition.y - v11->vWorldPosition.y) * v18 + v11->vWorldPosition.y; + v12->vWorldPosition.z = (v16->vWorldPosition.z - v11->vWorldPosition.z) * v18 + v11->vWorldPosition.z; + v12->u = (v16->u - v11->u) * v18 + v11->u; + v12->v = (v16->v - v11->v) * v18 + v11->v; ++v12; a3 = v12; - *((float *)v12 - 11) = (v16->vWorldPosition.y - *((float *)v11 - 1)) * v18 + *((float *)v11 - 1); - *((float *)v12 - 10) = (v16->vWorldPosition.z - *(float *)v11) * v18 + *(float *)v11; - *((float *)v12 - 3) = (v16->u - *((float *)v11 + 7)) * v18 + *((float *)v11 + 7); - *((float *)v12 - 2) = (v16->v - *((float *)v11 + 8)) * v18 + *((float *)v11 + 8); ++*pOutNumVertices; *a7 = 1; } - ++result; - v11 += 48; + + v11++; v21 = v15; v20 = v17; if ( v19 >= a2 ) break; v9 = a1; + v19++; } - result = (bool)pOutNumVertices; - if ( (signed int)*pOutNumVertices >= 3 ) - LOBYTE(result) = 1; - else -LABEL_19: - LOBYTE(result) = 0; - return result; + + return *pOutNumVertices >= 3; } //----- (00498737) --------------------------------------------------------