# HG changeset patch # User Ritor1 # Date 1363960743 -21600 # Node ID cd9ae9a2c99c023dc4ac3453f7faf5f40e157d96 # Parent 14cf77af15deb382d9fb7123cd19038f93a0d098# Parent 2f4e33c1ed24b2fc0c5ab09ec99849331503c315 Слияние diff -r 14cf77af15de -r cd9ae9a2c99c GUIWindow.cpp --- a/GUIWindow.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/GUIWindow.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -523,7 +523,7 @@ pTexture_TownPortalIcons[2] = pIcons_LOD->LoadTexturePtr("tpwarlock", TEXTURE_16BIT_PALETTE); pTexture_TownPortalIcons[3] = pIcons_LOD->LoadTexturePtr("tpisland", TEXTURE_16BIT_PALETTE); pTexture_TownPortalIcons[4] = pIcons_LOD->LoadTexturePtr("tpheaven", TEXTURE_16BIT_PALETTE); - pTexture_TownPortalIcons[5] = pIcons_LOD->LoadTexturePtr( "tphell", TEXTURE_16BIT_PALETTE); + pTexture_TownPortalIcons[5] = pIcons_LOD->LoadTexturePtr("tphell", TEXTURE_16BIT_PALETTE); for (uint i = 0; i < 6; ++i) v1->CreateButton(pTownPortalBook_xs[i], pTownPortalBook_ys[i], pTownPortalBook_ws[i], pTownPortalBook_hs[i], 1, 182, 183, i, 0, "", nullptr); diff -r 14cf77af15de -r cd9ae9a2c99c Game.h --- a/Game.h Fri Mar 22 19:58:47 2013 +0600 +++ b/Game.h Fri Mar 22 19:59:03 2013 +0600 @@ -34,7 +34,7 @@ GAME_STATE_NEWGAME_OUT_GAMEMENU = 0x4, GAME_STATE_5 = 0x5, GAME_STATE_6 = 0x6, - GAME_STATE_7 = 0x7, + GAME_STATE_GAME_QUITTING_TO_MAIN_MENU = 7, GAME_STATE_8 = 0x8, GAME_STATE_FINAL_WINDOW = 0x9, GAME_STATE_A = 0xA diff -r 14cf77af15de -r cd9ae9a2c99c Indoor.cpp --- a/Indoor.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/Indoor.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -3227,8 +3227,8 @@ //LOWORD(v24) = v49->x; //v49 = v24; //v59 = v49->x; - v25 = v1->x >= sX ? 0 : 2; // BUG TODO TROLOLO - v26 = v25 | v2->x < sX; // SWAP v1 and v2 till the result's correct + v25 = v1->x >= sX ? 0 : 2; + v26 = v25 | v2->x < sX; if ( v26 != 3 ) { if (!v26) diff -r 14cf77af15de -r cd9ae9a2c99c Indoor_stuff.h --- a/Indoor_stuff.h Fri Mar 22 19:58:47 2013 +0600 +++ b/Indoor_stuff.h Fri Mar 22 19:59:03 2013 +0600 @@ -385,9 +385,9 @@ inline ~stru154() {} - int _49B04D(struct ODMFace *a2, struct BSPVertexBuffer *a3); - int _49B0C9(struct Vec3_float_ *pNormal, float dist); - int _49B13D(struct ODMFace *pFace, struct BSPVertexBuffer *pVertices, struct Vec3_float_ *a3, float *a4); + void GetFacePlaneAndClassify(struct ODMFace *a2, struct BSPVertexBuffer *a3); + void ClassifyPolygon(struct Vec3_float_ *pNormal, float dist); + void GetFacePlane(struct ODMFace *pFace, struct BSPVertexBuffer *pVertices, struct Vec3_float_ *pOutNormal, float *pOutDist); void (__thiscall ***vdestructor_ptr)(stru154 *, bool); diff -r 14cf77af15de -r cd9ae9a2c99c LOD.cpp --- a/LOD.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/LOD.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -436,7 +436,7 @@ } //----- (004ACC38) -------------------------------------------------------- -int LODSprite::_4ACC38(RenderBillboardTransform_local0 *a2, char a3) +int LODSprite::DrawSprite_sw(RenderBillboardTransform_local0 *a2, char a3) { RenderBillboardTransform_local0 *v3; // edi@1 int result; // eax@1 diff -r 14cf77af15de -r cd9ae9a2c99c LOD.h --- a/LOD.h Fri Mar 22 19:58:47 2013 +0600 +++ b/LOD.h Fri Mar 22 19:59:03 2013 +0600 @@ -221,7 +221,7 @@ ~LODSprite(); void Release(); - int _4ACC38(struct RenderBillboardTransform_local0 *a2, char a3); + int DrawSprite_sw(struct RenderBillboardTransform_local0 *a2, char a3); int _4AD2D1(struct RenderBillboardTransform_local0 *a2, int a3); char pName[12]; //0 diff -r 14cf77af15de -r cd9ae9a2c99c Render.cpp --- a/Render.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/Render.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -218,7 +218,7 @@ soft_billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(p->uPalette, 0, 1); v5 = p->uHwSpriteID; if ( v5 >= 0 ) - pSprites_LOD->pSpriteHeaders[v5]._4ACC38(&soft_billboard, 1); + pSprites_LOD->pSpriteHeaders[v5].DrawSprite_sw(&soft_billboard, 1); } } } @@ -2150,7 +2150,7 @@ v33 = 3; else v33 = v108 != 0 ? 5 : 0; - static_sub_0048034E_stru_154._49B0C9(v23, v95); + static_sub_0048034E_stru_154.ClassifyPolygon(v23, v95); if ( pDecalBuilder->uNumDecals > 0 ) pDecalBuilder->ApplyDecals(31 - v16->dimming_level, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1); } @@ -2295,7 +2295,7 @@ else pVertices = (RenderVertexSoft *)(v108 != 0 ? 5 : 0); //a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0); - static_sub_0048034E_stru_76D590._49B0C9(v48, *(float *)&a4); + static_sub_0048034E_stru_76D590.ClassifyPolygon(v48, *(float *)&a4); if ( pDecalBuilder->uNumDecals > 0 ) pDecalBuilder->ApplyDecals(31 - v40->dimming_level, 4, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)pVertices, -1); } @@ -2418,7 +2418,7 @@ v70 = 3; else v70 = v108 != 0 ? 5 : 0; - static_sub_0048034E_stru_76D578._49B0C9(v63, v87); + static_sub_0048034E_stru_76D578.ClassifyPolygon(v63, v87); if ( pDecalBuilder->uNumDecals > 0 ) pDecalBuilder->ApplyDecals(31 - v40->dimming_level, 4, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70, -1); } @@ -3050,7 +3050,7 @@ } v13 = *((short *)v1 - 8); if ( v13 >= 0 ) - pSprites_LOD->pSpriteHeaders[v13]._4ACC38(&billboard, 1); + pSprites_LOD->pSpriteHeaders[v13].DrawSprite_sw(&billboard, 1); } } } diff -r 14cf77af15de -r cd9ae9a2c99c UIPopup.cpp --- a/UIPopup.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/UIPopup.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -643,12 +643,12 @@ //----- (0041E360) -------------------------------------------------------- -char *__fastcall MonsterPopup_Draw(unsigned int uActorID, GUIWindow *edx0) +void MonsterPopup_Draw(unsigned int uActorID, GUIWindow *edx0) { unsigned int v2; // esi@1 Actor *v3; // esi@3 int v4; // eax@3 - unsigned int v5; // ecx@3 + //unsigned int v5; // ecx@3 NPCData *v6; // eax@3 unsigned __int16 v7; // cx@3 int v8; // eax@4 @@ -657,10 +657,10 @@ LODSprite *v11; // esi@17 unsigned int v12; // ecx@17 Sprite *v13; // edi@18 - int v14; // ecx@18 - int v15; // edx@18 - int v16; // edx@18 - int v17; // eax@18 + //int v14; // ecx@18 + //int v15; // edx@18 + //int v16; // edx@18 + //int v17; // eax@18 unsigned int v18; // ecx@19 unsigned int v19; // eax@21 char *v20; // esi@28 @@ -672,15 +672,15 @@ char *v26; // edx@34 unsigned __int8 v27; // sf@36 unsigned __int8 v28; // of@36 - int v29; // esi@40 - char *v30; // ecx@40 - int v31; // eax@40 - int v32; // esi@43 - unsigned __int16 v33; // ax@45 - int v34; // edx@45 - int v35; // eax@45 + //int v29; // esi@40 + //unsigned __int16 *v30; // ecx@40 + //int v31; // eax@40 + //int v32; // esi@43 + //unsigned __int16 v33; // ax@45 + //int v34; // edx@45 + //int v35; // eax@45 int v36; // eax@49 - char *v37; // eax@52 + //char *v37; // eax@52 int v38; // eax@55 unsigned __int16 v39; // ax@59 SpellBuff *v40; // eax@60 @@ -691,7 +691,7 @@ signed int v45; // edi@65 unsigned __int16 v46; // ax@73 Player *v47; // ecx@77 - unsigned int v48; // eax@85 + //unsigned int v48; // eax@85 GUIFont *v49; // edi@90 int v50; // edi@90 SpellBuff *v51; // eax@91 @@ -706,7 +706,7 @@ unsigned __int8 v60; // dl@138 char *v62; // eax@147 int v63; // eax@152 - char *result; // eax@152 + //char *result; // eax@152 int v65; // eax@155 const char *v66; // [sp-10h] [bp-1FCh]@121 const char *v67; // [sp-10h] [bp-1FCh]@125 @@ -735,20 +735,20 @@ unsigned int v109; // [sp+1A8h] [bp-44h]@32 LPVOID v110; // [sp+1ACh] [bp-40h]@28 unsigned int v111; // [sp+1B0h] [bp-3Ch]@29 - char **v112; // [sp+1B4h] [bp-38h]@3 - IDirectDrawSurface *v222; // [sp+1B8h] [bp-34h]@18 + int v112; // [sp+1B4h] [bp-38h]@3 + int v222; // [sp+1B8h] [bp-34h]@18 unsigned __int8 v114; // [sp+1BFh] [bp-2Dh]@133 int v115; // [sp+1C0h] [bp-2Ch]@3 unsigned int v116; // [sp+1C4h] [bp-28h]@18 int i; // [sp+1C8h] [bp-24h]@18 - Player *a2; // [sp+1CCh] [bp-20h]@28 + int a2; // [sp+1CCh] [bp-20h]@28 int v119; // [sp+1D0h] [bp-1Ch]@18 SpellBuff *v120; // [sp+1D4h] [bp-18h]@18 Actor *v121; // [sp+1D8h] [bp-14h]@3 int a5; // [sp+1DCh] [bp-10h]@3 GUIWindow *a1; // [sp+1E0h] [bp-Ch]@1 int v124; // [sp+1E4h] [bp-8h]@18 - char *a4; // [sp+1E8h] [bp-4h]@18 + int a4; // [sp+1E8h] [bp-4h]@18 a1 = edx0; v2 = uActorID; @@ -763,13 +763,13 @@ v106.uParentBillboardID = -1; v3 = &pActors[v2]; v121 = v3; - v4 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xFFu, 0x9Bu); - v5 = v3->sNPC_ID; + v4 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 255, 0x9Bu); + //v5 = v3->sNPC_ID; a5 = v4; - v6 = GetNPCData(v5); + v6 = GetNPCData(v3->sNPC_ID); v7 = v3->pMonsterInfo.uID; - v112 = (char **)v6; - v115 = byte_4E2B70[((signed __int16)v7 - 1) / 3] - 40; + //v112 = (char **)v6; + v115 = monster_popup_y_offsets[((signed __int16)v7 - 1) / 3] - 40; if ( v7 == pMonsterInfoUI_Doll.pMonsterInfo.uID ) { v9 = pMonsterInfoUI_Doll.uCurrentActionLength; @@ -784,6 +784,7 @@ v9 = v8 % 256 + 128; pMonsterInfoUI_Doll.uCurrentActionLength = v8 % 256 + 128; } + if ( (signed int)pMonsterInfoUI_Doll.uCurrentActionTime > (signed __int16)v9 ) { pMonsterInfoUI_Doll.uCurrentActionTime = 0; @@ -794,16 +795,15 @@ } else { - rand(); + //rand(); pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_Bored; - if ( (pMonsterInfoUI_Doll.pMonsterInfo.uID < 115 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 186) - && (pMonsterInfoUI_Doll.pMonsterInfo.uID < 232 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 249) - && rand() % 30 < 100 ) + if ( (pMonsterInfoUI_Doll.pMonsterInfo.uID < 115 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 186) && + (pMonsterInfoUI_Doll.pMonsterInfo.uID < 232 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 249) && rand() % 30 < 100 ) pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_AtkMelee; pMonsterInfoUI_Doll.uCurrentActionLength = 8 * pSpriteFrameTable->pSpriteSFrames[v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation]].uAnimLength; } } - v10 = pSpriteFrameTable->GetFrame( v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation], pMonsterInfoUI_Doll.uCurrentActionTime); + v10 = pSpriteFrameTable->GetFrame( v3->pSpriteIDs[pMonsterInfoUI_Doll.uCurrentActionAnimation], pMonsterInfoUI_Doll.uCurrentActionTime); v11 = &pSprites_LOD->pSpriteHeaders[v10->pHwSpriteIDs[0]];//40 * v10->pHwSpriteIDs[0] + 7218180; v106.pTarget = pRenderer->pTargetSurface; v106.pTargetZ = pRenderer->pActiveZBuffer; @@ -829,46 +829,48 @@ { v13 = &pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]]; v106.uScreenSpaceY = v115 + v106.uViewportY + v13->uBufferHeight; - v222 = (IDirectDrawSurface *)v13->pTextureSurface; + //v222 = (IDirectDrawSurface *)v13->pTextureSurface; memset(&Dst, 0, 0x64u); Dst.dwSize = 100; Dst.dwFillColor = 0; memset(&pDesc, 0, 0x7Cu); pDesc.dwSize = 124; - v222->GetSurfaceDesc((LPDDSURFACEDESC)&pDesc); - v14 = v13->uBufferHeight; - v120 = (SpellBuff *)v13->uBufferWidth; + v13->pTextureSurface->GetSurfaceDesc(&pDesc); + //v14 = v13->uBufferHeight; + //v120 = (SpellBuff *)v13->uBufferWidth; v107 = 0; - v15 = v13->uAreaX; - v119 = (signed int)v120 / 2; + //v15 = v13->uAreaX; + //v119 = v13->uBufferWidth / 2; i = 0; - a4 = (char *)(v106.uScreenSpaceX + v15 - (signed int)v120 / 2); - v115 = v13->uAreaY; - v16 = v13->uAreaWidth + (signed int)v120 / 2 + v15 - (int)v120; - v124 = v106.uScreenSpaceY + v115 - v14; - v17 = v13->uAreaHeight + v115 - v14; - v116 = v106.uScreenSpaceX + v16; - v119 = v106.uScreenSpaceY + v17; - if ( (signed int)a4 < (signed int)v106.uViewportX ) + //a4 = v106.uScreenSpaceX + v15 - v13->uBufferWidth / 2; + int dst_x = v106.uScreenSpaceX + v13->uAreaX - v13->uBufferWidth / 2; + //v115 = v13->uAreaY; + //v16 = v13->uAreaWidth + v13->uBufferWidth / 2 + v13->uAreaX - v13->uBufferWidth; + //v124 = v106.uScreenSpaceY + v115 - v14; + int dst_y = v106.uScreenSpaceY + v13->uAreaY - v13->uBufferHeight; + //v17 = v13->uAreaHeight + v13->uAreaY - v14; + //v116 = v106.uScreenSpaceX + v16; + uint dst_z = v106.uScreenSpaceX + v13->uAreaX + v13->uAreaWidth + v13->uBufferWidth / 2 - v13->uBufferWidth; + //v119 = v106.uScreenSpaceY + v17; + uint dst_w = v106.uScreenSpaceY + v13->uAreaY + v13->uAreaHeight - v13->uBufferHeight; + if (dst_x < v106.uViewportX) { - v18 = v106.uViewportX - (int)a4; - a4 = (char *)v106.uViewportX; + v18 = v106.uViewportX - dst_x; + dst_x = v106.uViewportX; v107 = v18; } - if ( v124 < (signed int)v106.uViewportY ) + if (dst_y < v106.uViewportY) { - v19 = v106.uViewportY - v124; - v124 = v106.uViewportY; + v19 = v106.uViewportY - dst_y; + dst_y = v106.uViewportY; i = v19; } - if ( (signed int)v116 > (signed int)v106.uViewportZ ) - v116 = v106.uViewportZ; - if ( v119 > (signed int)v106.uViewportW ) - v119 = v106.uViewportW; - pRenderer->FillRectFast(v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, - pRenderer->uTargetBMask | pRenderer->uTargetGMask); - pRenderer->FillRectFast(v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, - pRenderer->uTargetBMask | pRenderer->uTargetGMask); + if (dst_z > v106.uViewportZ) + dst_z = v106.uViewportZ; + if (dst_w > v106.uViewportW) + dst_w = v106.uViewportW; + pRenderer->FillRectFast(v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, pRenderer->uTargetBMask | pRenderer->uTargetGMask); + pRenderer->FillRectFast(v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, pRenderer->uTargetBMask | pRenderer->uTargetGMask); v84.left = v106.uViewportX; v84.top = v106.uViewportY; v84.right = v106.uViewportZ; @@ -876,25 +878,27 @@ ErrD3D(pRenderer->pBackBuffer4->Blt(&v84, 0, 0, 16778240u, &Dst)); if ( pRenderer->uTargetGBits == 5 ) { + __debugbreak(); // no monster popup for r5g5b5 yet memset(&pDesc, 0, 0x7Cu); pDesc.dwSize = 124; - if ( pRenderer->LockSurface_DDraw4((IDirectDrawSurface4 *)v222, &pDesc, DDLOCK_WAIT)) + if ( pRenderer->LockSurface_DDraw4(v13->pTextureSurface, &pDesc, DDLOCK_WAIT)) { - v20 = (char *)v124; + v20 = (char *)dst_y; v110 = pDesc.lpSurface; - a2 = (Player *)v124; - if ( v124 < v119 ) + a2 = dst_y; + if (dst_y < dst_w) { - v111 = 2 * pRenderer->uTargetSurfacePitch; - v21 = (int)a4; - v22 = &pRenderer->pTargetSurface[(int)&a4[v124 * pRenderer->uTargetSurfacePitch]]; - v23 = i - v124; - v120 = (SpellBuff *)&pRenderer->pTargetSurface[(int)&a4[v124 * pRenderer->uTargetSurfacePitch]]; - v115 = i - v124; + //v111 = 2 * pRenderer->uTargetSurfacePitch; + v21 = dst_x; + v22 = &pRenderer->pTargetSurface[dst_y * pRenderer->uTargetSurfacePitch + dst_x]; + auto _v22_2 = v22; + v23 = i - dst_y; + //v120 = (SpellBuff *)&pRenderer->pTargetSurface[(int)&a4[v124 * pRenderer->uTargetSurfacePitch]]; + v115 = i - dst_y; while ( 1 ) { - v124 = v21; - if ( v21 < (signed int)v116 ) + dst_y = v21; + if ( v21 < dst_z ) { v24 = (int)&v20[v23]; v25 = v107 - v21; @@ -902,73 +906,54 @@ for ( i = v107 - v21; ; v25 = i ) { v108 = (unsigned __int16 *)((pDesc.lPitch >> 1) * pDesc.dwHeight * v109 / v13->uAreaHeight); - v26 = (char *)v108 + pDesc.dwWidth * (v25 + v124++) / v13->uAreaWidth; + v26 = (char *)v108 + pDesc.dwWidth * (v25 + dst_y++) / v13->uAreaWidth; *v22 = *((short *)v110 + (int)v26); ++v22; - if ( v124 >= (signed int)v116 ) + if ( dst_y >= dst_z ) break; } v23 = v115; } - v22 = (unsigned __int16 *)((char *)v120 + v111); - v20 = (char *)&a2->pConditions[0] + 1; - v28 = __OFSUB__((int)&a2->pConditions[0] + 1, v119); - v27 = (signed int)((char *)&a2->pConditions[0] + -v119 + 1) < 0; - a2 = (Player *)((char *)a2 + 1); - v120 = (SpellBuff *)((char *)v120 + v111); + v22 = (unsigned __int16 *)((char *)_v22_2 + 2 * pRenderer->uTargetSurfacePitch); + _v22_2 = v22; + v20 = (char *)(a2 + 1); + v28 = __OFSUB__(a2 + 1, dst_w); + v27 = (signed int)(a2++ + 1 - dst_w) < 0; + //a2 = (Player *)((char *)a2 + 1); + //v120 = (SpellBuff *)((char *)v120 + v111); if ( !(v27 ^ v28) ) break; - v21 = (int)a4; + v21 = dst_x; } } - v222->Unlock(0); + v13->pTextureSurface->Unlock(0); } } else { memset(&pDesc, 0, 0x7Cu); pDesc.dwSize = 124; - if ( pRenderer->LockSurface_DDraw4((IDirectDrawSurface4 *)v222, &pDesc, DDLOCK_WAIT) ) + if ( pRenderer->LockSurface_DDraw4(v13->pTextureSurface, &pDesc, DDLOCK_WAIT) ) { - v108 = (unsigned __int16 *)pDesc.lpSurface; - a2 = (Player *)v124; - if ( v124 < v119 ) + auto src = (unsigned __int16 *)pDesc.lpSurface; + + uint num_top_scanlines_above_frame_y = i - dst_y; + for (uint y = dst_y; y < dst_w; ++y) { - v109 = 2 * pRenderer->uTargetSurfacePitch; - v29 = (int)a4; - v30 = (char *)&pRenderer->pTargetSurface[(int)&a4[v124 * pRenderer->uTargetSurfacePitch]]; - v31 = i - v124; - v120 = (SpellBuff *)&pRenderer->pTargetSurface[(int)&a4[v124 * pRenderer->uTargetSurfacePitch]]; - v115 = i - v124; - while ( 1 ) - { - v124 = v29; - if ( v29 < (signed int)v116 ) - { - v32 = v107 - (int)a4; - v111 = (unsigned int)((char *)a2 + v31); - for ( i = v107 - (int)a4; ; v32 = i ) - { - v110 = (LPVOID)((pDesc.lPitch >> 1) * pDesc.dwHeight * v111 / v13->uAreaHeight); - v33 = v108[(int)((char *)v110 + pDesc.dwWidth * (v32 + v124) / v13->uAreaWidth)]; - v34 = v33 & 0x1F | 2 * (unsigned __int16)(v108[(int)((char *)v110 + pDesc.dwWidth * (v32 + v124++) / v13->uAreaWidth)] & 0xFFE0); - v35 = v124; - *(short *)v30 = v34; - v30 += 2; - if ( v35 >= (signed int)v116 ) - break; - } - v31 = v115; - } - a2 = (Player *)((char *)a2 + 1); - v30 = (char *)v120 + v109; - v120 = (SpellBuff *)((char *)v120 + v109); - if ( (signed int)a2 >= v119 ) - break; - v29 = (int)a4; - } + auto dst = &pRenderer->pTargetSurface[y * pRenderer->uTargetSurfacePitch + dst_x]; + + uint src_y = num_top_scanlines_above_frame_y + y; + for (uint x = dst_x; x < dst_z; ++x) + { + uint src_x = v107 - dst_x + x; // num scanlines left to frame_x + current x + + uint idx = pDesc.dwHeight * src_y / v13->uAreaHeight * (pDesc.lPitch / sizeof(short)) + + pDesc.dwWidth * src_x / v13->uAreaWidth; + uint b = src[idx] & 0x1F; + *dst++ = b | 2 * (src[idx] & 0xFFE0); + } } - v222->Unlock(0); + v13->pTextureSurface->Unlock(0); } } } @@ -977,19 +962,20 @@ pRenderer->FillRectFast(v106.uViewportX, v106.uViewportY, v106.uViewportZ - v106.uViewportX, v106.uViewportW - v106.uViewportY, 0); v36 = v10->pHwSpriteIDs[0]; if ( v36 >= 0 ) - pSprites_LOD->pSpriteHeaders[v36]._4ACC38(&v106, 0); + pSprites_LOD->pSpriteHeaders[v36].DrawSprite_sw(&v106, 0); } + if ( v121->sNPC_ID ) { - v37 = v112[6]; - if ( v37 ) + //v37 = v6->uProfession; + if (v6->uProfession) { - sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[429], *v112, aNPCProfessionNames[(signed int)v37]); + sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[429], v6->pName, aNPCProfessionNames[v6->uProfession]); // "%s the %s" / ^Pi[%s] %s } else { v77 = 2000; - v72 = *v112; + v72 = v6->pName; } } else @@ -1001,7 +987,7 @@ else v72 = pMonsterStats->pInfos[v121->pMonsterInfo.uID].pName; } - if(!v121->sNPC_ID || (v121->sNPC_ID && !v37)) + if(!v121->sNPC_ID || (v121->sNPC_ID && !v6->uProfession)) strncpy(pTmpBuf, v72, v77); v39 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); a1->DrawTitleText(pFontComic, 0, 0xCu, v39, pTmpBuf, 3u); @@ -1077,7 +1063,7 @@ v119 = 1; v116 = 1; i = 1; - v112 = (char **)1; + v112 = 1; } } } @@ -1102,11 +1088,14 @@ v47->PlaySound((PlayerSpeech)v73, 0); } } - a2 = pParty->pPlayers; - do + + for (uint _it = 0; _it < 4; ++_it) { - LOBYTE(v48) = a2->GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID); - v111 = v48; + auto player = pParty->pPlayers + _it; + + //LOBYTE(v48) = player->GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID); + //v111 = v48; + v111 = player->GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID); v120 = (SpellBuff *)138; do { @@ -1115,11 +1104,12 @@ v120 = (SpellBuff *)((char *)v120 - 1); } while ( v120 ); - ++a2; + //++a2; } - while ( (signed int)a2 < (signed int)pParty->pHirelings ); + //while ( (signed int)a2 < (signed int)pParty->pHirelings ); + v49 = pFontSmallnum; - a2 = (Player *)pFontSmallnum; + a2 = (int)pFontSmallnum; a1->DrawText(pFontSmallnum, 12, 196, a5, pGlobalTXT_LocalizationStrings[631], 0, 0, 0); v50 = LOBYTE(v49->uFontHeight) + 193; if ( !v115 ) @@ -1144,92 +1134,92 @@ { case 0u: v124 = 60; - a4 = pGlobalTXT_LocalizationStrings[591]; + a4 = (int)pGlobalTXT_LocalizationStrings[591]; break; case 1u: v124 = 82; - a4 = pGlobalTXT_LocalizationStrings[649]; + a4 = (int)pGlobalTXT_LocalizationStrings[649]; break; case 2u: v124 = 92; - a4 = pGlobalTXT_LocalizationStrings[592]; + a4 = (int)pGlobalTXT_LocalizationStrings[592]; break; case 3u: v124 = 63; - a4 = pGlobalTXT_LocalizationStrings[4]; + a4 = (int)pGlobalTXT_LocalizationStrings[4]; break; case 4u: v52 = pGlobalTXT_LocalizationStrings[220]; - a4 = v52; + a4 = (int)v52; v124 = 81; break; case 5u: v52 = pGlobalTXT_LocalizationStrings[162]; - a4 = v52; + a4 = (int)v52; v124 = 81; break; case 6u: v53 = pGlobalTXT_LocalizationStrings[593]; v124 = 35; - a4 = v53; + a4 = (int)v53; break; case 8u: v53 = pGlobalTXT_LocalizationStrings[608]; v124 = 62; - a4 = v53; + a4 = (int)v53; break; case 7u: case 9u: a4 = 0; v124 = 0; ++v51; - v222 = (IDirectDrawSurface *)((char *)v222 + 1); + v222 = v222 + 1; v120 = v51; __debugbreak(); // fix condition continue; case 0xAu: v124 = 47; - a4 = pGlobalTXT_LocalizationStrings[221]; + a4 = (int)pGlobalTXT_LocalizationStrings[221]; break; case 0xBu: v124 = 66; - a4 = pGlobalTXT_LocalizationStrings[607]; + a4 = (int)pGlobalTXT_LocalizationStrings[607]; break; case 0xCu: v124 = 85; - a4 = pGlobalTXT_LocalizationStrings[610]; + a4 = (int)pGlobalTXT_LocalizationStrings[610]; break; case 0xDu: v124 = 86; - a4 = pGlobalTXT_LocalizationStrings[609]; + a4 = (int)pGlobalTXT_LocalizationStrings[609]; break; case 0xEu: v124 = 17; - a4 = pGlobalTXT_LocalizationStrings[279]; + a4 = (int)pGlobalTXT_LocalizationStrings[279]; break; case 0xFu: v124 = 38; - a4 = pGlobalTXT_LocalizationStrings[442]; + a4 = (int)pGlobalTXT_LocalizationStrings[442]; break; case 0x10u: v124 = 46; - a4 = pGlobalTXT_LocalizationStrings[443]; + a4 = (int)pGlobalTXT_LocalizationStrings[443]; break; case 0x11u: v124 = 51; - a4 = pGlobalTXT_LocalizationStrings[440]; + a4 = (int)pGlobalTXT_LocalizationStrings[440]; break; case 0x12u: v124 = 5; - a4 = pGlobalTXT_LocalizationStrings[441]; + a4 = (int)pGlobalTXT_LocalizationStrings[441]; break; case 0x13u: v124 = 95; - a4 = pGlobalTXT_LocalizationStrings[229]; + a4 = (int)pGlobalTXT_LocalizationStrings[229]; break; case 0x14u: v124 = 73; - a4 = pGlobalTXT_LocalizationStrings[228]; + a4 = (int)pGlobalTXT_LocalizationStrings[228]; break; default: a4 = 0; @@ -1237,22 +1227,23 @@ } if ( a4 ) { - v54 = a4; + v54 = (char *)a4; v55 = GetSpellColor(v124); a1->DrawText((GUIFont *)a2, 28, v50, v55, v54, 0, 0, 0); - v50 = v50 + BYTE5(a2->pConditions[0]) - 3; + v50 = v50 + *(char *)(a2 + 5) - 3; v51 = v120; } } ++v51; - v222 = (IDirectDrawSurface *)((char *)v222 + 1); + v222 = v222 + 1; v120 = v51; __debugbreak(); // fix condition } //while ( (signed int)((char *)&v222->lpVtbl + 1) < 22 ); while (true); + if ( !a4 ) { v78 = 0; @@ -1263,12 +1254,12 @@ } } v56 = pFontSmallnum; - a4 = (char *)v106.uViewportY; + a4 = v106.uViewportY; if ( v119 ) { sprintf(pTmpBuf, "%s\f%05u\t100%d\n", pGlobalTXT_LocalizationStrings[108], 0, v121->pMonsterInfo.uHP); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); - a4 = &a4[LOBYTE(v56->uFontHeight) - 3]; + a4 = a4 + LOBYTE(v56->uFontHeight) - 3; v79 = v121->pMonsterInfo.uAC; v75 = 0; v70 = pGlobalTXT_LocalizationStrings[12]; @@ -1281,12 +1272,12 @@ v79 = (unsigned int)pGlobalTXT_LocalizationStrings[630]; v75 = 0; v70 = pGlobalTXT_LocalizationStrings[12]; - a4 = &a4[LOBYTE(v56->uFontHeight) - 3]; + a4 = a4 + LOBYTE(v56->uFontHeight) - 3; v67 = "%s\f%05u\t100%s\n"; } sprintf(pTmpBuf, v67, v70, v75, v79); - a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); - a4 = &a4[LOBYTE(v56->uFontHeight) - 6] + LOBYTE(v56->uFontHeight); + a1->DrawText(v56, 150, a4, a5, pTmpBuf, 0, 0, 0); + a4 = a4 + LOBYTE(v56->uFontHeight) - 6 + LOBYTE(v56->uFontHeight); v95[0] = pGlobalTXT_LocalizationStrings[87]; v95[1] = pGlobalTXT_LocalizationStrings[6]; v95[2] = pGlobalTXT_LocalizationStrings[240]; @@ -1302,7 +1293,7 @@ { sprintf(pTmpBuf, "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[18], 0, v95[v121->pMonsterInfo.uAttack1Type]); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); - a4 = &a4[LOBYTE(v56->uFontHeight) - 3]; + a4 = a4 + LOBYTE(v56->uFontHeight) - 3; v57 = v121->pMonsterInfo.uAttack1DamageBonus; if ( v57 ) sprintf(pTmpBuf, "%s\f%05u\t080%dd%d+%d\n", pGlobalTXT_LocalizationStrings[53], @@ -1315,12 +1306,12 @@ { sprintf(pTmpBuf, "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[18], 0, pGlobalTXT_LocalizationStrings[630]); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); - a4 = &a4[LOBYTE(v56->uFontHeight) - 3]; + a4 = a4 + LOBYTE(v56->uFontHeight) - 3; sprintf(pTmpBuf, "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[53], 0, pGlobalTXT_LocalizationStrings[630]); } - a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); + a1->DrawText(v56, 150, a4, a5, pTmpBuf, 0, 0, 0); v58 = LOBYTE(v56->uFontHeight); - a4 = &a4[v58 - 6] + v58; + a4 = a4 + v58 - 6 + v58; if ( !i ) { v80 = pGlobalTXT_LocalizationStrings[630]; @@ -1330,7 +1321,7 @@ sprintf(pTmpBuf, v68, v71, v76, v80); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); v58 = LOBYTE(v56->uFontHeight); - a4 = &a4[v58 - 3]; + a4 = a4 + v58 - 3; } else { @@ -1344,7 +1335,7 @@ sprintf(pTmpBuf, "%s\f%05u\t060%s\n", v120, 0, pSpellStats->pInfos[v114].pShortName); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); v58 = LOBYTE(v56->uFontHeight); - a4 = &a4[v58 - 3]; + a4 = a4 + v58 - 3; v59 = v121; } v60 = v59->pMonsterInfo.uSpell2ID; @@ -1353,7 +1344,7 @@ sprintf(pTmpBuf, "\f%05u\t060%s\n", 0, pSpellStats->pInfos[v60].pShortName); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); v58 = LOBYTE(v56->uFontHeight); - a4 = &a4[v58 - 3]; + a4 = a4 + v58 - 3; v59 = v121; } if ( !v59->pMonsterInfo.uSpell1ID && !v59->pMonsterInfo.uSpell2ID ) @@ -1365,12 +1356,12 @@ sprintf(pTmpBuf, v68, v71, v76, v80); a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0); v58 = LOBYTE(v56->uFontHeight); - a4 = &a4[v58 - 3]; + a4 = a4 + v58 - 3; } } - a4 = &a4[v58 - 3]; - a1->DrawText(v56, 150, (int)a4, a5, pGlobalTXT_LocalizationStrings[626], 0, 0, 0); - a4 = &a4[LOBYTE(v56->uFontHeight) - 3]; + a4 = a4 + v58 - 3; + a1->DrawText(v56, 150, a4, a5, pGlobalTXT_LocalizationStrings[626], 0, 0, 0); + a4 = a4 + LOBYTE(v56->uFontHeight) - 3; v85[0] = pGlobalTXT_LocalizationStrings[87]; v85[1] = pGlobalTXT_LocalizationStrings[6]; v85[2] = pGlobalTXT_LocalizationStrings[240]; @@ -1409,11 +1400,10 @@ v81 = pGlobalTXT_LocalizationStrings[153]; } sprintf(pTmpBuf, "%s\f%05u\t070%s\n", v85[v124], 0, v81); - a1->DrawText(v56, 170, (int)a4, a5, pTmpBuf, 0, 0, 0); + a1->DrawText(v56, 170, a4, a5, pTmpBuf, 0, 0, 0); v63 = LOBYTE(v56->uFontHeight); v124 += 4; - result = &a4[v63 - 3]; - a4 = result; + a4 = a4 + v63 - 3; } while ( v124 < 40 ); } @@ -1423,11 +1413,10 @@ do { sprintf(pTmpBuf, "%s\f%05u\t070%s\n", v85[i], 0, pGlobalTXT_LocalizationStrings[630]); // "?" - a1->DrawText(v56, 170, (int)a4, a5, pTmpBuf, 0, 0, 0); + a1->DrawText(v56, 170, a4, a5, pTmpBuf, 0, 0, 0); v65 = LOBYTE(v56->uFontHeight); ++i; - result = &a4[v65 - 3]; - a4 = result; + a4 = a4 + v65 - 3; } while ( i < 10 ); } @@ -1435,9 +1424,8 @@ { sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[650], v121->sCurrentHP); pFontSmallnum->GetLineWidth(pTmpBuf); - result = a1->DrawTitleText(pFontSmallnum, 0, a1->uFrameHeight - LOBYTE(pFontSmallnum->uFontHeight) - 12, 0, pTmpBuf, 3); + a1->DrawTitleText(pFontSmallnum, 0, a1->uFrameHeight - LOBYTE(pFontSmallnum->uFontHeight) - 12, 0, pTmpBuf, 3); } - return result; } diff -r 14cf77af15de -r cd9ae9a2c99c VideoPlayer.cpp --- a/VideoPlayer.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/VideoPlayer.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -1063,6 +1063,7 @@ { if ( (unsigned int)uCPUSpeed < 165 ) { + Log::Warning(L"Smacker seems to use lower resolution because it thinks CPU is slow"); v10 = SmackCheckSurfaceFromat() | 2; } else diff -r 14cf77af15de -r cd9ae9a2c99c _deleted.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/_deleted.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -0,0 +1,494 @@ + +/* +//----- (004AC1C9) -------------------------------------------------------- +int __thiscall _4AC1C9_get_cpu_speed(unsigned int _this, Vec4_int_ *a2) +{ + unsigned int v2; // esi@1 + __int16 v3; // di@1 + signed int v4; // ebx@1 + int v5; // ecx@3 + Vec4_int_ *v6; // eax@10 + Vec4_int_ *v7; // esi@14 + int result; // eax@16 + char *v9; // esi@16 + Vec4_int_ a1; // [sp+Ch] [bp-34h]@10 + Vec4_int_ v11; // [sp+1Ch] [bp-24h]@14 + Vec4_int_ Dst; // [sp+2Ch] [bp-14h]@1 + int v13; // [sp+3Ch] [bp-4h]@1 + + v2 = _this; + v3 = _4382BC_get_cpu_speed_sub0(_this); + v13 = _4383ED_get_cpu_speed_sub2(); + v4 = 0; + memset(&Dst, 0, 0x10u); + if ( v3 < 0 ) + goto LABEL_19; + if ( (signed int)v2 > 0 ) + { + if ( (signed int)v2 > 150 ) + { + v5 = (int)a2; + } + else + { + v5 = 4000 * v2; + v4 = 1; + } + } + else + { + v5 = 4000 * dword_4F031C[(unsigned __int16)v3]; + } + if ( v13 & 0x10 && !v4 ) + { + if ( v2 ) + v6 = _4AC4FD_get_cpu_clocks_rdtsc(v5, &a1); + else + v6 = _4AC33A_get_cpu_clocks_QPC(v5, &a1); + goto LABEL_14; + } + if ( (unsigned __int16)v3 < 3u ) + { +LABEL_19: + v7 = &Dst; + goto LABEL_16; + } + v6 = _4AC277_get_cpu_speed_sub3(v5, &a1); +LABEL_14: + v11.x = v6->x; + v11.y = v6->y; + v11.z = v6->z; + v11.w = v6->w; + v7 = &v11; +LABEL_16: + result = (int)a2; + a2->x = v7->x; + v9 = (char *)&v7->y; + a2->y = *(int *)v9; + v9 += 4; + a2->z = *(int *)v9; + a2->w = *((int *)v9 + 1); + return result; +} +// 4F031C: using guessed type int dword_4F031C[]; + + + +//----- (004382BC) -------------------------------------------------------- +__int16 __thiscall _4382BC_get_cpu_speed_sub0(int _this) +{ + __int16 result; // ax@4 + __int16 v14; // sp@11 + int v15; // [sp-4h] [bp-Ch]@0 + signed __int16 v16; // [sp+4h] [bp-4h]@1 + __int16 v17; // [sp+4h] [bp-4h]@8 + __int16 v18; // [sp+4h] [bp-4h]@11 + + v16 = 1; + __asm { pushf } + if ( v15 == (v15 ^ 0x200000) ) + v16 = 0; + if ( v16 ) + { + result = _43847A_get_cpu_speed_sub1(); + } + else + { + //UNDEF(_ZF); + //UNDEF(_SF); + //UNDEF(_OF); + _CF = 0; + if ( !_ZF ) + _CF = 1; + __asm { pushfw } + bProcessorIsNotIntel = (BYTE2(v15) & 1 ^ 1) & 1; + _CF = 0; + _OF = 0; + _ZF = 0; + _SF = 1; + __asm { pushfw } + v17 = 2; + if ( (HIWORD(v15) | 0xF000) & 0xF000 ) + v17 = -1; + __asm { popfw } + result = v17; + if ( v17 != 2 ) + { + _CF = 0; + _OF = 0; + _ZF = v14 == 0; + _SF = v14 < 0; + __asm { pushf } + v18 = 3; + if ( v15 != (v15 ^ 0x40000) ) + v18 = -1; + __asm { popf } + result = v18; + if ( v18 != 3 ) + result = 4; + } + } + if ( bProcessorIsNotIntel ) + HIBYTE(result) |= 0x80u; + return result; +} + + + +//----- (0043847A) -------------------------------------------------------- +__int16 __cdecl _43847A_get_cpu_speed_sub1() +{ + signed int v5; // eax@1 + char v12[12]; // [sp+Ch] [bp-28h]@1 + char v13; // [sp+18h] [bp-1Ch]@1 + char v14; // [sp+19h] [bp-1Bh]@1 + int v15[4]; // [sp+1Ch] [bp-18h]@1 + int v16; // [sp+2Eh] [bp-6h]@1 + char v17; // [sp+32h] [bp-2h]@6 + char v18; // [sp+33h] [bp-1h]@1 + + *(int *)v12 = *(int *)"------------"; + *(int *)&v12[4] = *(int *)"--------"; + *(int *)&v12[8] = *(int *)"----"; + v13 = asc_4E4938[12]; + v14 = 0; + v18 = 0; + v15[0] = *(int *)"GenuineIntel"; + v15[1] = *(int *)"ineIntel"; + v15[2] = *(int *)"ntel"; + v16 = 65535; + LOBYTE(v15[3]) = aGenuineintel[12]; + _EAX = 0; + __asm { cpuid } + *(int *)v12 = _EBX; + *(int *)&v12[4] = _EDX; + *(int *)&v12[8] = _ECX; + v5 = 0; + do + { + if ( v12[v5] != *((char *)v15 + v5) ) + bProcessorIsNotIntel = 1; + ++v5; + } + while ( v5 < 12 ); + if ( v5 >= 1 ) + { + _EAX = 1; + __asm { cpuid } + v18 = _EAX & 0xF; + LOBYTE(_EAX) = (unsigned __int8)(_EAX & 0xF0) >> 4; + v17 = _EAX; + LOWORD(v16) = ((_EAX & 0xF00u) >> 8) & 0xF; + } + return v16; +} + + + +//----- (004383ED) -------------------------------------------------------- +int __cdecl _4383ED_get_cpu_speed_sub2() +{ + signed int v9; // eax@4 + int v16; // [sp-4h] [bp-38h]@0 + int v17[3]; // [sp+Ch] [bp-28h]@1 + char v18; // [sp+18h] [bp-1Ch]@1 + char v19; // [sp+19h] [bp-1Bh]@1 + int v20[4]; // [sp+1Ch] [bp-18h]@1 + int v21; // [sp+2Ch] [bp-8h]@1 + int v22; // [sp+30h] [bp-4h]@1 + + v17[0] = *(int *)"------------"; + v17[1] = *(int *)"--------"; + v17[2] = *(int *)"----"; + v18 = asc_4E4938[12]; + v19 = 0; + v22 = 0; + v20[0] = *(int *)"GenuineIntel"; + v20[1] = *(int *)"ineIntel"; + v20[2] = *(int *)"ntel"; + LOBYTE(v20[3]) = aGenuineintel[12]; + _CF = 0; + _OF = 0; + _ZF = 0; + _SF = 0; + v21 = 1; + __asm { pushf } + if ( v16 == (v16 ^ 0x200000) ) + v21 = 0; + if ( (short)v21 ) + { + _EAX = 0; + __asm { cpuid } + v17[0] = _EBX; + v17[1] = _EDX; + v17[2] = _ECX; + v9 = 0; + do + { + if ( *((char *)v17 + v9) != *((char *)v20 + v9) ) + bProcessorIsNotIntel = 1; + ++v9; + } + while ( v9 < 12 ); + if ( v9 >= 1 ) + { + _EAX = 1; + __asm { cpuid } + v22 = _EDX; + } + } + return v22; +} + + + +//----- (004AC4FD) -------------------------------------------------------- +Vec4_int_ *__thiscall _4AC4FD_get_cpu_clocks_rdtsc(int _this, Vec4_int_ *a1) +{ + int v2; // eax@1 + int v3; // eax@4 + bool v4; // eax@5 + unsigned __int64 v5; // kr00_8@8 + int v6; // edi@9 + int v7; // eax@9 + bool v8; // eax@10 + unsigned __int64 v9; // kr08_8@13 + unsigned int v10; // eax@15 + Vec4_int_ *result; // eax@17 + int Dst; // [sp+Ch] [bp-2Ch]@1 + int v13; // [sp+10h] [bp-28h]@17 + int v14; // [sp+14h] [bp-24h]@15 + int v15; // [sp+18h] [bp-20h]@17 + unsigned int v16; // [sp+1Ch] [bp-1Ch]@8 + unsigned int v17; // [sp+20h] [bp-18h]@8 + unsigned int v18; // [sp+24h] [bp-14h]@13 + int nPriority; // [sp+28h] [bp-10h]@1 + __int64 v20; // [sp+2Ch] [bp-Ch]@1 + int v21; // [sp+34h] [bp-4h]@3 + + HIDWORD(v20) = GetCurrentThread(); + memset(&Dst, 0, 0x10u); + v2 = GetThreadPriority(HIDWORD(v20)); + nPriority = v2; + if ( v2 != 0x7FFFFFFF ) + SetThreadPriority(HIDWORD(v20), v2 + 1); + __outbyte(0x70u, 0); + v21 = __inbyte(0x71u); + do + { + __outbyte(0x70u, 0); + LODWORD(v20) = __inbyte(0x71u); + v3 = v20 - v21; + if ( (signed int)v20 >= v21 ) + v4 = v3 > 0; + else + v4 = v3 + 10; + } + while ( !v4 ); + v5 = __rdtsc(); + v16 = HIDWORD(v5); + v17 = v5; + do + { + __outbyte(0x70u, 0); + v21 = __inbyte(0x71u); + v6 = v21; + v7 = v21 - v20; + if ( v21 >= (signed int)v20 ) + v8 = v7 > 0; + else + v8 = v7 + 10; + } + while ( !v8 ); + v9 = __rdtsc(); + v18 = HIDWORD(v9); + v21 = v9; + if ( nPriority != 0x7FFFFFFF ) + SetThreadPriority(HIDWORD(v20), nPriority); + nPriority = v21; + *(__int64 *)((char *)&v20 + 4) = __PAIR__(v18, v21) - __PAIR__(v16, v17); + Dst = HIDWORD(v20); + v10 = HIDWORD(v20) / 0xF4240; + v14 = HIDWORD(v20) / 0xF4240; + if ( HIDWORD(v20) / 0x186A0 - 10 * HIDWORD(v20) / 0xF4240 >= 6 ) + ++v10; + v15 = v10; + result = a1; + v13 = 1000000 * v6 - 1000000 * v20; + a1->x = Dst; + a1->y = v13; + a1->z = v14; + a1->w = v15; + return result; +} + + + + +//----- (004AC33A) -------------------------------------------------------- +Vec4_int_ *__thiscall _4AC33A_get_cpu_clocks_QPC(int _this, Vec4_int_ *a1) +{ + int v2; // esi@1 + int v3; // ebx@1 + unsigned __int64 v4; // qax@4 + unsigned __int64 v5; // qax@7 + DWORD v6; // edi@7 + DWORD v7; // eax@7 + unsigned int v8; // ecx@10 + unsigned __int64 v9; // qax@10 + unsigned int v10; // edi@10 + int v11; // eax@14 + unsigned int v12; // ecx@19 + Vec4_int_ *result; // eax@24 + int Dst; // [sp+Ch] [bp-4Ch]@1 + int v15; // [sp+10h] [bp-48h]@23 + int v16; // [sp+14h] [bp-44h]@21 + int v17; // [sp+18h] [bp-40h]@21 + LARGE_INTEGER Frequency; // [sp+1Ch] [bp-3Ch]@1 + LARGE_INTEGER PerformanceCount; // [sp+24h] [bp-34h]@2 + LARGE_INTEGER v20; // [sp+2Ch] [bp-2Ch]@2 + int v21; // [sp+34h] [bp-24h]@2 + int v22; // [sp+38h] [bp-20h]@2 + int v23; // [sp+3Ch] [bp-1Ch]@4 + int v24; // [sp+40h] [bp-18h]@7 + int nPriority; // [sp+44h] [bp-14h]@2 + unsigned int v26; // [sp+48h] [bp-10h]@1 + unsigned int v27; // [sp+4Ch] [bp-Ch]@1 + HANDLE hThread; // [sp+50h] [bp-8h]@1 + int v29; // [sp+54h] [bp-4h]@1 + + v2 = 0; + v3 = 0; + v29 = 0; + v27 = 0; + v26 = 0; + hThread = GetCurrentThread(); + memset(&Dst, 0, 0x10u); + if ( QueryPerformanceFrequency(&Frequency) ) + { + do + { + ++v29; + v22 = v2; + v21 = v3; + QueryPerformanceCounter(&PerformanceCount); + v20 = PerformanceCount; + nPriority = GetThreadPriority(hThread); + if ( nPriority != 2147483647 ) + SetThreadPriority(hThread, 15); + while ( v20.s.LowPart - PerformanceCount.s.LowPart < 0x32 ) + { + QueryPerformanceCounter(&v20); + v4 = __rdtsc(); + v23 = v4; + } + PerformanceCount = v20; + do + { + QueryPerformanceCounter(&v20); + v5 = __rdtsc(); + v24 = v5; + v6 = v20.s.LowPart; + v7 = PerformanceCount.s.LowPart; + } + while ( v20.s.LowPart - PerformanceCount.s.LowPart < 0x3E8 ); + if ( nPriority != 2147483647 ) + { + SetThreadPriority(hThread, nPriority); + v7 = PerformanceCount.s.LowPart; + v6 = v20.s.LowPart; + } + v8 = v24 - v23; + v27 += v24 - v23; + v9 = (100000 * v6 - 100000 * v7) / (Frequency.s.LowPart / 0xA); + v10 = v9; + v26 += v9; + if ( v9 % Frequency.s.LowPart > Frequency.s.LowPart >> 1 ) + v10 = v9 + 1; + v3 = v8 / v10; + if ( v8 % v10 > v10 >> 1 ) + v3 = v8 / v10 + 1; + v2 = v21; + v11 = v3 + v22 + v21; + } + while ( v29 < 3 + || v29 < 20 + && ((unsigned int)(3 * v3 - v11) > 3 || (unsigned int)(3 * v21 - v11) > 3 || (unsigned int)(3 * v22 - v11) > 3) ); + v12 = 10 * v27 / v26; + if ( 100 * v27 / v26 - 10 * v12 >= 6 ) + ++v12; + v16 = v27 / v26; + v17 = v27 / v26; + if ( v12 - 10 * v27 / v26 >= 6 ) + v17 = v27 / v26 + 1; + v15 = v26; + Dst = v27; + } + result = a1; + a1->x = Dst; + a1->y = v15; + a1->z = v16; + a1->w = v17; + return result; +} + + + + + +//----- (004AC277) -------------------------------------------------------- +Vec4_int_ *__thiscall _4AC277_get_cpu_speed_sub3(unsigned int _this, Vec4_int_ *a2) +{ + signed int v2; // esi@1 + signed __int16 v4; // bx@3 + int v10; // esi@8 + int v11; // eax@10 + Vec4_int_ *result; // eax@13 + Vec4_int_ Dst; // [sp+8h] [bp-30h]@1 + LARGE_INTEGER Frequency; // [sp+18h] [bp-20h]@1 + LARGE_INTEGER PerformanceCount; // [sp+20h] [bp-18h]@3 + LARGE_INTEGER v16; // [sp+28h] [bp-10h]@5 + int v17; // [sp+30h] [bp-8h]@1 + int v18; // [sp+34h] [bp-4h]@2 + + v17 = _this; + v2 = -1; + memset(&Dst, 0, 0x10u); + if ( QueryPerformanceFrequency(&Frequency) ) + { + v18 = 10; + do + { + QueryPerformanceCounter(&PerformanceCount); + _EAX = -2147483648; + v4 = 4000; + do + { + __asm { bsf ecx, eax } + --v4; + } + while ( v4 ); + QueryPerformanceCounter(&v16); + if ( (signed int)v16.s.LowPart - (signed int)PerformanceCount.s.LowPart < (unsigned int)v2 ) + v2 = v16.s.LowPart - PerformanceCount.s.LowPart; + --v18; + } + while ( v18 ); + v10 = 100000 * v2 / (Frequency.s.LowPart / 0xA); + if ( v10 % Frequency.s.LowPart > Frequency.s.LowPart >> 1 ) + ++v10; + v11 = v17 / (unsigned int)v10; + Dst.z = v17 / (unsigned int)v10; + if ( v17 % (unsigned int)v10 > (unsigned int)v10 >> 1 ) + ++v11; + Dst.x = v17; + Dst.y = v10; + Dst.w = v11; + } + result = a2; + a2->x = Dst.x; + a2->y = Dst.y; + a2->z = Dst.z; + a2->w = Dst.w; + return result; +}*/ \ No newline at end of file diff -r 14cf77af15de -r cd9ae9a2c99c mm7_2.cpp --- a/mm7_2.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_2.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -9730,14 +9730,14 @@ byte_6BE388_graphicsmode = 0; uGammaPos = ReadWindowsRegistryInt("GammaPos", 4); - if (uGammaPos < 0 || uGammaPos > 9) + if (uGammaPos > 9) uGammaPos = 4; pGame->pGammaController->Initialize(uGammaPos * 0.1 + 0.6); if ( ReadWindowsRegistryInt("Bloodsplats", 1) ) pGame->uFlags2 |= GAME_FLAGS_2_DRAW_BLOODSPLATS; else - pGame->uFlags2 &= GAME_FLAGS_2_DRAW_BLOODSPLATS; + pGame->uFlags2 &= ~GAME_FLAGS_2_DRAW_BLOODSPLATS; uTurnSpeed = ReadWindowsRegistryInt("TurnDelta", 0); dword_6BE384_2dacceloff = ReadWindowsRegistryInt("2dacceloff", 0); @@ -9750,26 +9750,29 @@ dword_6BE364_game_settings_1 |= 0x4000; - if ( uTurnSpeed ) - { switch ( uTurnSpeed ) { - case 1u: + case 0: // undefined turn option + __debugbreak(); // really shouldn't use this mode + uTurnSpeed = (unsigned int)uCPUSpeed < 199 ? 128 : 64; // adjust turn speed to estimated fps + break; + + case 1u: // 16x + Log::Warning(L"x16 Turn Speed"); // really shouldn't use this mode uTurnSpeed = 128; - break; - case 2u: + break; + + case 2u: // 32x + Log::Warning(L"x32 Turn Speed"); // really shouldn't use this mode uTurnSpeed = 64; - break; - case 3u: + break; + + case 3u: // smooth uTurnSpeed = 0; - break; - } - } - else - { - uTurnSpeed = (unsigned int)uCPUSpeed < 0xC7 ? 128 : 64; // adjust turn speed to estimated fps - } - initing=false; //ADDED Gloval + break; + } + + initing = false; //ADDED Gloval return true; } @@ -10064,17 +10067,24 @@ stru_51076C.registry_debug_flags = ReadWindowsRegistryInt("debug flags", 0); - v8 = sub_4AC1C9(0, (Vec4_int_ *)a2); + /*v8 = _4AC1C9_get_cpu_speed(0, (Vec4_int_ *)a2); Rect.left = *(int *)v8; Rect.top = *(int *)(v8 + 4); Rect.right = *(int *)(v8 + 8); Rect.bottom = *(int *)(v8 + 12); - uCPUSpeed = Rect.bottom; - - - if (MM7_Initialize()) - { - Log::Warning(L"MM init: ok"); + uCPUSpeed = Rect.bottom;*/ + uCPUSpeed = 2048; // about 2GHz + + + if (!MM7_Initialize()) + { + Log::Warning(L"MM init: failed"); + pGame->Deinitialize(); + return 1; + } + + + Log::Warning(L"MM init: ok"); pEventTimer->Pause(); if ( pRenderer->bUserDirect3D && pRenderer->uAcquiredDirect3DDevice == 1 ) @@ -10203,7 +10213,7 @@ uGameState = 0; continue; } - if ( uGameState == 7 ) + if ( uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU) __debugbreak(); /*{ pAudioPlayer->StopChannels(-1, -1); @@ -10220,11 +10230,9 @@ AIL_redbook_play(pAudioPlayer->hAILRedbook, startms + 1, end_ms); } } - } - else - Log::Warning(L"MM init: failed"); + pGame->Deinitialize(); -return 1; + return 1; } diff -r 14cf77af15de -r cd9ae9a2c99c mm7_3.cpp --- a/mm7_3.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_3.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -4869,7 +4869,7 @@ if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 ) { v31 = (LightmapBuilder *)(v50 ? 3 : v49 != 0 ? 5 : 0); - static_RenderBuildingsD3D_stru_73C834._49B04D(pFace, (BSPVertexBuffer *)v56 - 1); + static_RenderBuildingsD3D_stru_73C834.GetFacePlaneAndClassify(pFace, (BSPVertexBuffer *)v56 - 1); if ( pDecalBuilder->uNumDecals > 0 ) { v40 = -1; @@ -5242,7 +5242,7 @@ v35 = (BSPVertexBuffer *)(v78 - 2); v12->field_108 = 1; - static_sub_004789DE_stru_73C818._49B04D((ODMFace *)v3, v35); + static_sub_004789DE_stru_73C818.GetFacePlaneAndClassify((ODMFace *)v3, v35); v55 = static_sub_004789DE_stru_73C818.face_plane.vNormal.x; v56 = static_sub_004789DE_stru_73C818.face_plane.vNormal.y; v57 = static_sub_004789DE_stru_73C818.face_plane.vNormal.z; diff -r 14cf77af15de -r cd9ae9a2c99c mm7_4.cpp --- a/mm7_4.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_4.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -268,7 +268,13 @@ signed int v54; // [sp+30h] [bp-10h]@41 signed int v55; // [sp+34h] [bp-Ch]@1 - LOG_DECOMPILATION_WARNING(); + //LOG_DECOMPILATION_WARNING(); + + static int blv_floor_id[50]; // 00721200 + static int blv_floor_level[50]; // 007212C8 + + static __int16 word_721390_ys[104]; // idb + static __int16 word_721460_xs[104]; // idb auto pSector = &pIndoor->pSectors[uSectorID]; v55 = 1; @@ -283,16 +289,16 @@ { for (uint j = 0; j < pFloor->uNumVertices; ++j) { - word_721460[2 * j] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].x; - word_721460[2 * j + 1] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].x; - word_721390[2 * j] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].y; - word_721390[2 * j + 1] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].y; + word_721460_xs[2 * j] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].x; + word_721460_xs[2 * j + 1] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].x; + word_721390_ys[2 * j] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].y; + word_721390_ys[2 * j + 1] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].y; } v44 = 2 * pFloor->uNumVertices; - word_721460[2 * pFloor->uNumVertices] = word_721460[0]; - word_721390[2 * pFloor->uNumVertices] = word_721390[0]; - - v48 = word_721390[0] >= y; + word_721460_xs[2 * pFloor->uNumVertices] = word_721460_xs[0]; + word_721390_ys[2 * pFloor->uNumVertices] = word_721390_ys[0]; + + v48 = word_721390_ys[0] >= y; v53 = 0; if ( pFloor->uNumVertices > 0 ) { @@ -300,36 +306,33 @@ { if ( v53 >= 2 ) break; - v50 = word_721390[i + 1] >= y; - if ( v48 == v50 ) + v50 = word_721390_ys[i + 1] >= y; + + v13 = i; + if ( v48 != v50 ) { - v13 = i; - } - else - { - v13 = i; - v14 = word_721460[i + 1] >= x ? 0 : 2; - v15 = v14 | word_721460[i] < x; + v14 = word_721460_xs[i + 1] >= x ? 0 : 2; + v15 = v14 | word_721460_xs[i] < x; if ( !v15) ++v53; else { - //v16 = word_721390[i]; - v17 = word_721390[i + 1] - word_721390[i]; - v18 = y - word_721390[i]; + //v16 = word_721390_ys[i]; + v17 = word_721390_ys[i + 1] - word_721390_ys[i]; + v18 = y - word_721390_ys[i]; LODWORD(v19) = v18 << 16; HIDWORD(v19) = v18 >> 16; - if ((signed int)(((unsigned __int64)(((signed int)word_721460[i + 1] - (signed int)word_721460[i]) * v19 / v17) >> 16) + word_721460[i]) >= x) + if ((signed int)(((unsigned __int64)(((signed int)word_721460_xs[i + 1] - (signed int)word_721460_xs[i]) * v19 / v17) >> 16) + word_721460_xs[i]) >= x) ++v53; } /*if ( v15 != 3 ) { if ( !v15 ) { - LODWORD(v19) = (y - word_721390[i]) << 16; - HIDWORD(v19) = (y - word_721390[i]) >> 16; - v16 = ((((word_721460[i + 1] - word_721460[i]) * v19 / (word_721390[i + 1] - word_721390[i])) >> 16) + word_721460[i]); + LODWORD(v19) = (y - word_721390_ys[i]) << 16; + HIDWORD(v19) = (y - word_721390_ys[i]) >> 16; + v16 = ((((word_721460_xs[i + 1] - word_721460_xs[i]) * v19 / (word_721390_ys[i + 1] - word_721390_ys[i])) >> 16) + word_721460_xs[i]); if ( v16 >= x) ++v53; } @@ -352,7 +355,7 @@ } v22 = v55++; blv_floor_level[v22] = v21; - dword_721200[v22] = pSector->pFloors[i]; + blv_floor_id[v22] = pSector->pFloors[i]; } } } @@ -371,38 +374,38 @@ { for (uint j = 0; j < portal->uNumVertices; ++j) { - word_721460[2 * j] = portal->pXInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].x; - word_721460[2 * j + 1] = portal->pXInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].x; - word_721390[2 * j] = portal->pYInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].y; - word_721390[2 * j + 1] = portal->pYInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].y; - } - word_721460[2 * portal->uNumVertices] = word_721460[0]; - word_721390[2 * portal->uNumVertices] = word_721390[0]; + word_721460_xs[2 * j] = portal->pXInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].x; + word_721460_xs[2 * j + 1] = portal->pXInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].x; + word_721390_ys[2 * j] = portal->pYInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].y; + word_721390_ys[2 * j + 1] = portal->pYInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].y; + } + word_721460_xs[2 * portal->uNumVertices] = word_721460_xs[0]; + word_721390_ys[2 * portal->uNumVertices] = word_721390_ys[0]; v54 = 0; - v49 = word_721390[0] >= y; + v49 = word_721390_ys[0] >= y; if ( portal->uNumVertices > 0 ) { for ( int i = 0; i < 2 * portal->uNumVertices; ++i ) { if ( v54 >= 2 ) break; - v47 = word_721390[i + 1] >= y; + v47 = word_721390_ys[i + 1] >= y; if ( v49 != v47 ) { - v28 = word_721460[i + 1] >= x ? 0 : 2; - v29 = v28 | word_721460[i] < x; + v28 = word_721460_xs[i + 1] >= x ? 0 : 2; + v29 = v28 | word_721460_xs[i] < x; if ( v29 != 3 ) { if ( !v29 ) ++v54; else { - //v30 = word_721390[v27]; - v31 = word_721390[i + 1] - word_721390[i]; - v32 = y - word_721390[i]; + //v30 = word_721390_ys[v27]; + v31 = word_721390_ys[i + 1] - word_721390_ys[i]; + v32 = y - word_721390_ys[i]; LODWORD(v33) = v32 << 16; HIDWORD(v33) = v32 >> 16; - if ((signed int)(((unsigned __int64)(((signed int)word_721460[i + 1] - (signed int)word_721460[i]) * v33 / v31) >> 16) + word_721460[i]) >= x) + if ((signed int)(((unsigned __int64)(((signed int)word_721460_xs[i + 1] - (signed int)word_721460_xs[i]) * v33 / v31) >> 16) + word_721460_xs[i]) >= x) ++v54; } } @@ -415,7 +418,7 @@ break; v34 = v55++; blv_floor_level[v34] = -29000; - dword_721200[v34] = pSector->pPortals[i]; + blv_floor_id[v34] = pSector->pPortals[i]; } } } @@ -423,12 +426,12 @@ } if ( v55 == 1 ) { - *pFaceID = dword_721200[0]; + *pFaceID = blv_floor_id[0]; return blv_floor_level[0]; } if ( !v55 ) return -30000; - *pFaceID = dword_721200[0]; + *pFaceID = blv_floor_id[0]; //result = blv_floor_level[0]; if ( v55 > 1 ) { @@ -439,13 +442,13 @@ if ( blv_floor_level[v35] >= blv_floor_level[0] || blv_floor_level[v35] > z + 5 ) continue; blv_floor_level[0] = blv_floor_level[v35]; - *pFaceID = dword_721200[v35]; + *pFaceID = blv_floor_id[v35]; continue; } if ( blv_floor_level[v35] < blv_floor_level[0] ) { blv_floor_level[0] = blv_floor_level[v35]; - *pFaceID = dword_721200[v35]; + *pFaceID = blv_floor_id[v35]; } } } @@ -2574,6 +2577,7 @@ float v26; // [sp+50h] [bp-8h]@3 float v27; // [sp+54h] [bp-4h]@3 + __debugbreak(); v22 = 0; v1 = this->pMemBlocks[1]->pAlignedBlock; v2 = this->pMemBlocks[6]->pAlignedBlock; @@ -4768,204 +4772,134 @@ //----- (0049B04D) -------------------------------------------------------- -int stru154::_49B04D(ODMFace *a2, BSPVertexBuffer *a3) +void stru154::GetFacePlaneAndClassify(ODMFace *a2, BSPVertexBuffer *a3) { - stru154 *v3; // edi@1 - signed int v4; // eax@1 - signed int result; // eax@9 - signed int v6; // [sp-8h] [bp-18h]@8 + //stru154 *v3; // edi@1 + //signed int v4; // eax@1 + //signed int result; // eax@9 + //signed int v6; // [sp-8h] [bp-18h]@8 Vec3_float_ v; // [sp+4h] [bp-Ch]@1 + float v7; v.x = 0.0; - v3 = this; v.y = 0.0; v.z = 0.0; - _49B13D(a2, a3, &v, (float *)&a3); - v4 = 2; - if ( a2->pFacePlane.vNormal.z ) - { - if ( !a2->pFacePlane.vNormal.x && !a2->pFacePlane.vNormal.y ) - v4 = 1; - } + GetFacePlane(a2, a3, &v, &v7); + + if (fabsf(a2->pFacePlane.vNormal.z) < 1e-6f) + polygonType = POLYGON_VerticalWall; + else if (fabsf(a2->pFacePlane.vNormal.x) < 1e-6f && + fabsf(a2->pFacePlane.vNormal.y) < 1e-6f) + polygonType = POLYGON_Floor; else - { - v4 = 0; - } - if ( v4 ) - { - if ( v4 == 1 ) - v6 = 3; - else - v6 = 4; - result = v6; - } - else - { - result = 1; - } - v3->face_plane.vNormal.x = v.x; - v3->face_plane.vNormal.y = v.y; - v3->face_plane.vNormal.z = v.z; - v3->face_plane.dist = *(float *)&a3; - v3->polygonType = (PolygonType)result; - return result; + polygonType = POLYGON_InBetweenFloorAndWall; + + face_plane.vNormal.x = v.x; + face_plane.vNormal.y = v.y; + face_plane.vNormal.z = v.z; + face_plane.dist = v7; } //----- (0049B0C9) -------------------------------------------------------- -int stru154::_49B0C9(Vec3_float_ *pNormal, float dist) +void stru154::ClassifyPolygon(Vec3_float_ *pNormal, float dist) { - signed int v3; // esi@1 - signed int result; // eax@9 - double v5; // st7@12 - double v6; // st6@12 - double v7; // st5@12 - signed int v8; // [sp+0h] [bp-4h]@8 - - v3 = 2; - if ( pNormal->z == 0.0 ) - { - v3 = 0; - } + if (fabsf(pNormal->z) < 1e-6f) + polygonType = POLYGON_VerticalWall; + else if (fabsf(pNormal->x) < 1e-6f && + fabsf(pNormal->y) < 1e-6f) + polygonType = POLYGON_Floor; else - { - if ( pNormal->x == 0.0 && pNormal->y == 0.0 ) - v3 = 1; - } - if ( v3 ) - { - if ( v3 == 1 ) - v8 = 3; - else - v8 = 4; - result = v8; - } - else - { - result = 1; - } - v5 = pNormal->z; - v6 = pNormal->y; - v7 = pNormal->x; - this->polygonType = (PolygonType)result; - this->face_plane.vNormal.x = v7; - this->face_plane.dist = dist; - this->face_plane.vNormal.y = v6; - this->face_plane.vNormal.z = v5; - return result; + polygonType = POLYGON_InBetweenFloorAndWall; + + face_plane.vNormal.x = pNormal->x; + face_plane.dist = dist; + face_plane.vNormal.y = pNormal->y; + face_plane.vNormal.z = pNormal->z; } //----- (0049B13D) -------------------------------------------------------- -int stru154::_49B13D(ODMFace *pFace, BSPVertexBuffer *pVertices, Vec3_float_ *a3, float *a4) +void stru154::GetFacePlane(ODMFace *pFace, BSPVertexBuffer *pVertices, Vec3_float_ *pOutNormal, float *pOutDist) { ODMFace *v5; // ebx@1 - int v6; // eax@1 - unsigned __int16 *v7; // ebx@2 - Vec3_int_ *v8; // eax@3 + //int v6; // eax@1 + //unsigned __int16 *v7; // ebx@2 + //Vec3_int_ *v8; // eax@3 Vec3_int_ *v9; // ecx@3 - double v10; // st7@3 - int v11; // ecx@3 + //double v10; // st7@3 + //int v11; // ecx@3 Vec3_int_ *v12; // ecx@3 - double v13; // st7@3 - double v14; // st6@3 - double v15; // st5@3 - int v16; // ecx@3 + //double v13; // st7@3 + //double v14; // st6@3 + //double v15; // st5@3 + //int v16; // ecx@3 Vec3_int_ *v17; // eax@3 - double v18; // st5@3 + //double v18; // st5@3 Vec3_float_ *v19; // eax@3 - int result; // eax@8 - float v21; // ecx@10 - double v22; // st7@10 - double v23; // st6@10 + //int result; // eax@8 + //float v21; // ecx@10 + //double v22; // st7@10 + //double v23; // st6@10 Vec3_float_ v2; // [sp+4h] [bp-64h]@3 - float v25; // [sp+18h] [bp-50h]@3 + //float v25; // [sp+18h] [bp-50h]@3 float v26; // [sp+1Ch] [bp-4Ch]@3 float v27; // [sp+20h] [bp-48h]@3 float v28; // [sp+24h] [bp-44h]@3 - float v29; // [sp+2Ch] [bp-3Ch]@3 - float v30; // [sp+30h] [bp-38h]@3 - float v31; // [sp+34h] [bp-34h]@3 - float v32; // [sp+38h] [bp-30h]@3 - float v33; // [sp+3Ch] [bp-2Ch]@3 + //float v29; // [sp+2Ch] [bp-3Ch]@3 + //float v30; // [sp+30h] [bp-38h]@3 + //float v31; // [sp+34h] [bp-34h]@3 + //float v32; // [sp+38h] [bp-30h]@3 + //float v33; // [sp+3Ch] [bp-2Ch]@3 Vec3_float_ v1; // [sp+40h] [bp-28h]@1 - float v35; // [sp+4Ch] [bp-1Ch]@3 - float v36; // [sp+50h] [bp-18h]@3 - float v37; // [sp+54h] [bp-14h]@3 + //float v35; // [sp+4Ch] [bp-1Ch]@3 + //float v36; // [sp+50h] [bp-18h]@3 + //float v37; // [sp+54h] [bp-14h]@3 Vec3_float_ v38; // [sp+58h] [bp-10h]@3 - int v39; // [sp+64h] [bp-4h]@1 - - v39 = 0; + //int v39; // [sp+64h] [bp-4h]@1 + + //v39 = 0; v1.x = 0.0; v5 = pFace; - v6 = pFace->uNumVertices; + //v6 = pFace->uNumVertices; v1.y = 0.0; v1.z = 0.0; - if ( v6 - 1 <= 0 ) - { -LABEL_8: - a3->x = (double)(v5->pFacePlane.vNormal.x & 0xFFFF) * 0.000015259022 + (double)(v5->pFacePlane.vNormal.x >> 16); - a3->y = (double)(v5->pFacePlane.vNormal.y & 0xFFFF) * 0.000015259022 + (double)(v5->pFacePlane.vNormal.y >> 16); - a3->z = (double)(v5->pFacePlane.vNormal.z & 0xFFFF) * 0.000015259022 + (double)(v5->pFacePlane.vNormal.z >> 16); - result = (int)a4; - *a4 = (double)(v5->pFacePlane.dist & 0xFFFF) * 0.000015259022 + (double)(v5->pFacePlane.dist >> 16); - } - else - { - v7 = &pFace->pVertexIDs[1]; - while ( 1 ) - { - v8 = pVertices->pVertices; - v9 = &v8[*(v7 - 1)]; - v35 = (double)v9->x; - v36 = (double)v9->y; - v10 = (double)v9->z; - v11 = *v7; - v37 = v10; - v12 = &v8[v11]; - v13 = (double)v12->x; - v14 = (double)v12->y; - v15 = (double)v12->z; - v16 = v7[1]; - v25 = v15; - v17 = &v8[v16]; - v18 = (double)v17->x; - v29 = (double)v17->y; - v30 = (double)v17->z; - v31 = v13 - v35; - v32 = v14 - v36; - v33 = v25 - v37; - v1.x = v31; - v26 = v18 - v13; - v1.y = v32; - v27 = v29 - v14; - v1.z = v33; - v28 = v30 - v25; + + if (pFace->uNumVertices >= 2) + { + int i = 0; + while ( i < pFace->uNumVertices - 2 ) + { + v9 = &pVertices->pVertices[pFace->pVertexIDs[i]]; + v12 = &pVertices->pVertices[pFace->pVertexIDs[i + 1]]; + v17 = &pVertices->pVertices[pFace->pVertexIDs[i + 2]]; + + v1.x = v12->x - v9->x; + v26 = v17->x - v12->x; + v1.y = v12->y - v9->y; + v27 = v17->y - v12->y; + v1.z = v12->z - v9->z; + v28 = v17->z - v12->z; v19 = Vec3_float_::Cross(&v1, &v2, v26, v27, v28); v38.x = v19->x; v38.y = v19->y; v38.z = v19->z; - if ( v38.x != 0.0 ) - break; - if ( v38.y != 0.0 || v38.z != 0.0 ) - break; - ++v39; - ++v7; - if ( v39 >= pFace->uNumVertices - 1 ) - { - v5 = pFace; - goto LABEL_8; - } - } - v38.Normalize(); - v21 = v38.y; - a3->x = v38.x; - v22 = v37 * v38.z; - v23 = v36 * v38.y; - a3->y = v21; - a3->z = v38.z; - result = (int)a4; - *a4 = -(v22 + v23 + v35 * v38.x); - } - return result; + if ( v38.x != 0.0 || v38.y != 0.0 || v38.z != 0.0) + { + v38.Normalize(); + + pOutNormal->x = v38.x; + pOutNormal->y = v38.y; + pOutNormal->z = v38.z; + + *pOutDist = -(v9->x * v38.x + v9->y * v38.y + v9->z * v38.z); + return; + } + } + } + + pOutNormal->x = (double)(v5->pFacePlane.vNormal.x & 0xFFFF) / 65535.0f + (double)(v5->pFacePlane.vNormal.x >> 16); + pOutNormal->y = (double)(v5->pFacePlane.vNormal.y & 0xFFFF) / 65535.0f + (double)(v5->pFacePlane.vNormal.y >> 16); + pOutNormal->z = (double)(v5->pFacePlane.vNormal.z & 0xFFFF) / 65535.0f + (double)(v5->pFacePlane.vNormal.z >> 16); + *pOutDist = (double)(v5->pFacePlane.dist & 0xFFFF) / 65535.0f + (double)(v5->pFacePlane.dist >> 16); } @@ -5454,327 +5388,6 @@ -//----- (004AC1C9) -------------------------------------------------------- -int __thiscall sub_4AC1C9(unsigned int _this, Vec4_int_ *a2) -{ - unsigned int v2; // esi@1 - __int16 v3; // di@1 - signed int v4; // ebx@1 - int v5; // ecx@3 - Vec4_int_ *v6; // eax@10 - Vec4_int_ *v7; // esi@14 - int result; // eax@16 - char *v9; // esi@16 - Vec4_int_ a1; // [sp+Ch] [bp-34h]@10 - Vec4_int_ v11; // [sp+1Ch] [bp-24h]@14 - Vec4_int_ Dst; // [sp+2Ch] [bp-14h]@1 - int v13; // [sp+3Ch] [bp-4h]@1 - - v2 = _this; - v3 = sub_4382BC(_this); - v13 = sub_4383ED(); - v4 = 0; - memset(&Dst, 0, 0x10u); - if ( v3 < 0 ) - goto LABEL_19; - if ( (signed int)v2 > 0 ) - { - if ( (signed int)v2 > 150 ) - { - v5 = (int)a2; - } - else - { - v5 = 4000 * v2; - v4 = 1; - } - } - else - { - v5 = 4000 * dword_4F031C[(unsigned __int16)v3]; - } - if ( v13 & 0x10 && !v4 ) - { - if ( v2 ) - v6 = sub_4AC4FD_get_cpu_clocks_rdtsc(v5, &a1); - else - v6 = sub_4AC33A_get_cpu_clocks_QPC(v5, &a1); - goto LABEL_14; - } - if ( (unsigned __int16)v3 < 3u ) - { -LABEL_19: - v7 = &Dst; - goto LABEL_16; - } - v6 = sub_4AC277(v5, &a1); -LABEL_14: - v11.x = v6->x; - v11.y = v6->y; - v11.z = v6->z; - v11.w = v6->w; - v7 = &v11; -LABEL_16: - result = (int)a2; - a2->x = v7->x; - v9 = (char *)&v7->y; - a2->y = *(int *)v9; - v9 += 4; - a2->z = *(int *)v9; - a2->w = *((int *)v9 + 1); - return result; -} -// 4F031C: using guessed type int dword_4F031C[]; - -//----- (004AC277) -------------------------------------------------------- -Vec4_int_ *__thiscall sub_4AC277(unsigned int _this, Vec4_int_ *a2) -{ - __debugbreak(); - return 0; - /*signed int v2; // esi@1 - signed __int16 v4; // bx@3 - int v10; // esi@8 - int v11; // eax@10 - Vec4_int_ *result; // eax@13 - Vec4_int_ Dst; // [sp+8h] [bp-30h]@1 - LARGE_INTEGER Frequency; // [sp+18h] [bp-20h]@1 - LARGE_INTEGER PerformanceCount; // [sp+20h] [bp-18h]@3 - LARGE_INTEGER v16; // [sp+28h] [bp-10h]@5 - int v17; // [sp+30h] [bp-8h]@1 - int v18; // [sp+34h] [bp-4h]@2 - - v17 = _this; - v2 = -1; - memset(&Dst, 0, 0x10u); - if ( QueryPerformanceFrequency(&Frequency) ) - { - v18 = 10; - do - { - QueryPerformanceCounter(&PerformanceCount); - _EAX = -2147483648; - v4 = 4000; - do - { - __asm { bsf ecx, eax } - --v4; - } - while ( v4 ); - QueryPerformanceCounter(&v16); - if ( (signed int)v16.s.LowPart - (signed int)PerformanceCount.s.LowPart < (unsigned int)v2 ) - v2 = v16.s.LowPart - PerformanceCount.s.LowPart; - --v18; - } - while ( v18 ); - v10 = 100000 * v2 / (Frequency.s.LowPart / 0xA); - if ( v10 % Frequency.s.LowPart > Frequency.s.LowPart >> 1 ) - ++v10; - v11 = v17 / (unsigned int)v10; - Dst.z = v17 / (unsigned int)v10; - if ( v17 % (unsigned int)v10 > (unsigned int)v10 >> 1 ) - ++v11; - Dst.x = v17; - Dst.y = v10; - Dst.w = v11; - } - result = a2; - a2->x = Dst.x; - a2->y = Dst.y; - a2->z = Dst.z; - a2->w = Dst.w; - return result;*/ -} - -//----- (004AC33A) -------------------------------------------------------- -Vec4_int_ *__thiscall sub_4AC33A_get_cpu_clocks_QPC(int _this, Vec4_int_ *a1) -{ - __debugbreak(); - return 0; - /*int v2; // esi@1 - int v3; // ebx@1 - unsigned __int64 v4; // qax@4 - unsigned __int64 v5; // qax@7 - DWORD v6; // edi@7 - DWORD v7; // eax@7 - unsigned int v8; // ecx@10 - unsigned __int64 v9; // qax@10 - unsigned int v10; // edi@10 - int v11; // eax@14 - unsigned int v12; // ecx@19 - Vec4_int_ *result; // eax@24 - int Dst; // [sp+Ch] [bp-4Ch]@1 - int v15; // [sp+10h] [bp-48h]@23 - int v16; // [sp+14h] [bp-44h]@21 - int v17; // [sp+18h] [bp-40h]@21 - LARGE_INTEGER Frequency; // [sp+1Ch] [bp-3Ch]@1 - LARGE_INTEGER PerformanceCount; // [sp+24h] [bp-34h]@2 - LARGE_INTEGER v20; // [sp+2Ch] [bp-2Ch]@2 - int v21; // [sp+34h] [bp-24h]@2 - int v22; // [sp+38h] [bp-20h]@2 - int v23; // [sp+3Ch] [bp-1Ch]@4 - int v24; // [sp+40h] [bp-18h]@7 - int nPriority; // [sp+44h] [bp-14h]@2 - unsigned int v26; // [sp+48h] [bp-10h]@1 - unsigned int v27; // [sp+4Ch] [bp-Ch]@1 - HANDLE hThread; // [sp+50h] [bp-8h]@1 - int v29; // [sp+54h] [bp-4h]@1 - - v2 = 0; - v3 = 0; - v29 = 0; - v27 = 0; - v26 = 0; - hThread = GetCurrentThread(); - memset(&Dst, 0, 0x10u); - if ( QueryPerformanceFrequency(&Frequency) ) - { - do - { - ++v29; - v22 = v2; - v21 = v3; - QueryPerformanceCounter(&PerformanceCount); - v20 = PerformanceCount; - nPriority = GetThreadPriority(hThread); - if ( nPriority != 2147483647 ) - SetThreadPriority(hThread, 15); - while ( v20.s.LowPart - PerformanceCount.s.LowPart < 0x32 ) - { - QueryPerformanceCounter(&v20); - v4 = __rdtsc(); - v23 = v4; - } - PerformanceCount = v20; - do - { - QueryPerformanceCounter(&v20); - v5 = __rdtsc(); - v24 = v5; - v6 = v20.s.LowPart; - v7 = PerformanceCount.s.LowPart; - } - while ( v20.s.LowPart - PerformanceCount.s.LowPart < 0x3E8 ); - if ( nPriority != 2147483647 ) - { - SetThreadPriority(hThread, nPriority); - v7 = PerformanceCount.s.LowPart; - v6 = v20.s.LowPart; - } - v8 = v24 - v23; - v27 += v24 - v23; - v9 = (100000 * v6 - 100000 * v7) / (Frequency.s.LowPart / 0xA); - v10 = v9; - v26 += v9; - if ( v9 % Frequency.s.LowPart > Frequency.s.LowPart >> 1 ) - v10 = v9 + 1; - v3 = v8 / v10; - if ( v8 % v10 > v10 >> 1 ) - v3 = v8 / v10 + 1; - v2 = v21; - v11 = v3 + v22 + v21; - } - while ( v29 < 3 - || v29 < 20 - && ((unsigned int)(3 * v3 - v11) > 3 || (unsigned int)(3 * v21 - v11) > 3 || (unsigned int)(3 * v22 - v11) > 3) ); - v12 = 10 * v27 / v26; - if ( 100 * v27 / v26 - 10 * v12 >= 6 ) - ++v12; - v16 = v27 / v26; - v17 = v27 / v26; - if ( v12 - 10 * v27 / v26 >= 6 ) - v17 = v27 / v26 + 1; - v15 = v26; - Dst = v27; - } - result = a1; - a1->x = Dst; - a1->y = v15; - a1->z = v16; - a1->w = v17; - return result;*/ -} - -//----- (004AC4FD) -------------------------------------------------------- -Vec4_int_ *__thiscall sub_4AC4FD_get_cpu_clocks_rdtsc(int _this, Vec4_int_ *a1) -{ - __debugbreak(); - return 0; - /*int v2; // eax@1 - int v3; // eax@4 - bool v4; // eax@5 - unsigned __int64 v5; // kr00_8@8 - int v6; // edi@9 - int v7; // eax@9 - bool v8; // eax@10 - unsigned __int64 v9; // kr08_8@13 - unsigned int v10; // eax@15 - Vec4_int_ *result; // eax@17 - int Dst; // [sp+Ch] [bp-2Ch]@1 - int v13; // [sp+10h] [bp-28h]@17 - int v14; // [sp+14h] [bp-24h]@15 - int v15; // [sp+18h] [bp-20h]@17 - unsigned int v16; // [sp+1Ch] [bp-1Ch]@8 - unsigned int v17; // [sp+20h] [bp-18h]@8 - unsigned int v18; // [sp+24h] [bp-14h]@13 - int nPriority; // [sp+28h] [bp-10h]@1 - __int64 v20; // [sp+2Ch] [bp-Ch]@1 - int v21; // [sp+34h] [bp-4h]@3 - - HIDWORD(v20) = GetCurrentThread(); - memset(&Dst, 0, 0x10u); - v2 = GetThreadPriority(HIDWORD(v20)); - nPriority = v2; - if ( v2 != 0x7FFFFFFF ) - SetThreadPriority(HIDWORD(v20), v2 + 1); - __outbyte(0x70u, 0); - v21 = __inbyte(0x71u); - do - { - __outbyte(0x70u, 0); - LODWORD(v20) = __inbyte(0x71u); - v3 = v20 - v21; - if ( (signed int)v20 >= v21 ) - v4 = v3 > 0; - else - v4 = v3 + 10; - } - while ( !v4 ); - v5 = __rdtsc(); - v16 = HIDWORD(v5); - v17 = v5; - do - { - __outbyte(0x70u, 0); - v21 = __inbyte(0x71u); - v6 = v21; - v7 = v21 - v20; - if ( v21 >= (signed int)v20 ) - v8 = v7 > 0; - else - v8 = v7 + 10; - } - while ( !v8 ); - v9 = __rdtsc(); - v18 = HIDWORD(v9); - v21 = v9; - if ( nPriority != 0x7FFFFFFF ) - SetThreadPriority(HIDWORD(v20), nPriority); - nPriority = v21; - *(__int64 *)((char *)&v20 + 4) = __PAIR__(v18, v21) - __PAIR__(v16, v17); - Dst = HIDWORD(v20); - v10 = HIDWORD(v20) / 0xF4240; - v14 = HIDWORD(v20) / 0xF4240; - if ( HIDWORD(v20) / 0x186A0 - 10 * HIDWORD(v20) / 0xF4240 >= 6 ) - ++v10; - v15 = v10; - result = a1; - v13 = 1000000 * v6 - 1000000 * v20; - a1->x = Dst; - a1->y = v13; - a1->z = v14; - a1->w = v15; - return result;*/ -} diff -r 14cf77af15de -r cd9ae9a2c99c mm7_5.cpp --- a/mm7_5.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_5.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -4018,173 +4018,6 @@ -//----- (004382BC) -------------------------------------------------------- -__int16 __thiscall sub_4382BC(int _this) -{ - LOG_DECOMPILATION_WARNING(); - return 0; - /*__int16 result; // ax@4 - __int16 v14; // sp@11 - int v15; // [sp-4h] [bp-Ch]@0 - signed __int16 v16; // [sp+4h] [bp-4h]@1 - __int16 v17; // [sp+4h] [bp-4h]@8 - __int16 v18; // [sp+4h] [bp-4h]@11 - - v16 = 1; - __asm { pushf } - if ( v15 == (v15 ^ 0x200000) ) - v16 = 0; - if ( v16 ) - { - result = sub_43847A(); - } - else - { - //UNDEF(_ZF); - //UNDEF(_SF); - //UNDEF(_OF); - _CF = 0; - if ( !_ZF ) - _CF = 1; - __asm { pushfw } - bProcessorIsNotIntel = (BYTE2(v15) & 1 ^ 1) & 1; - _CF = 0; - _OF = 0; - _ZF = 0; - _SF = 1; - __asm { pushfw } - v17 = 2; - if ( (HIWORD(v15) | 0xF000) & 0xF000 ) - v17 = -1; - __asm { popfw } - result = v17; - if ( v17 != 2 ) - { - _CF = 0; - _OF = 0; - _ZF = v14 == 0; - _SF = v14 < 0; - __asm { pushf } - v18 = 3; - if ( v15 != (v15 ^ 0x40000) ) - v18 = -1; - __asm { popf } - result = v18; - if ( v18 != 3 ) - result = 4; - } - } - if ( bProcessorIsNotIntel ) - HIBYTE(result) |= 0x80u; - return result;*/ -} - -//----- (004383ED) -------------------------------------------------------- -int __cdecl sub_4383ED() -{ - LOG_DECOMPILATION_WARNING(); - return 0; - /*signed int v9; // eax@4 - int v16; // [sp-4h] [bp-38h]@0 - int v17[3]; // [sp+Ch] [bp-28h]@1 - char v18; // [sp+18h] [bp-1Ch]@1 - char v19; // [sp+19h] [bp-1Bh]@1 - int v20[4]; // [sp+1Ch] [bp-18h]@1 - int v21; // [sp+2Ch] [bp-8h]@1 - int v22; // [sp+30h] [bp-4h]@1 - - v17[0] = *(int *)"------------"; - v17[1] = *(int *)"--------"; - v17[2] = *(int *)"----"; - v18 = asc_4E4938[12]; - v19 = 0; - v22 = 0; - v20[0] = *(int *)"GenuineIntel"; - v20[1] = *(int *)"ineIntel"; - v20[2] = *(int *)"ntel"; - LOBYTE(v20[3]) = aGenuineintel[12]; - _CF = 0; - _OF = 0; - _ZF = 0; - _SF = 0; - v21 = 1; - __asm { pushf } - if ( v16 == (v16 ^ 0x200000) ) - v21 = 0; - if ( (short)v21 ) - { - _EAX = 0; - __asm { cpuid } - v17[0] = _EBX; - v17[1] = _EDX; - v17[2] = _ECX; - v9 = 0; - do - { - if ( *((char *)v17 + v9) != *((char *)v20 + v9) ) - bProcessorIsNotIntel = 1; - ++v9; - } - while ( v9 < 12 ); - if ( v9 >= 1 ) - { - _EAX = 1; - __asm { cpuid } - v22 = _EDX; - } - } - return v22;*/ -} - -//----- (0043847A) -------------------------------------------------------- -__int16 __cdecl sub_43847A() -{ - __debugbreak(); - return 0; - /*signed int v5; // eax@1 - char v12[12]; // [sp+Ch] [bp-28h]@1 - char v13; // [sp+18h] [bp-1Ch]@1 - char v14; // [sp+19h] [bp-1Bh]@1 - int v15[4]; // [sp+1Ch] [bp-18h]@1 - int v16; // [sp+2Eh] [bp-6h]@1 - char v17; // [sp+32h] [bp-2h]@6 - char v18; // [sp+33h] [bp-1h]@1 - - *(int *)v12 = *(int *)"------------"; - *(int *)&v12[4] = *(int *)"--------"; - *(int *)&v12[8] = *(int *)"----"; - v13 = asc_4E4938[12]; - v14 = 0; - v18 = 0; - v15[0] = *(int *)"GenuineIntel"; - v15[1] = *(int *)"ineIntel"; - v15[2] = *(int *)"ntel"; - v16 = 65535; - LOBYTE(v15[3]) = aGenuineintel[12]; - _EAX = 0; - __asm { cpuid } - *(int *)v12 = _EBX; - *(int *)&v12[4] = _EDX; - *(int *)&v12[8] = _ECX; - v5 = 0; - do - { - if ( v12[v5] != *((char *)v15 + v5) ) - bProcessorIsNotIntel = 1; - ++v5; - } - while ( v5 < 12 ); - if ( v5 >= 1 ) - { - _EAX = 1; - __asm { cpuid } - v18 = _EAX & 0xF; - LOBYTE(_EAX) = (unsigned __int8)(_EAX & 0xF0) >> 4; - v17 = _EAX; - LOWORD(v16) = ((_EAX & 0xF00u) >> 8) & 0xF; - } - return v16;*/ -} diff -r 14cf77af15de -r cd9ae9a2c99c mm7_data.cpp --- a/mm7_data.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_data.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -486,7 +486,17 @@ unsigned int pManaBarPos[4] = {102, 217, 331, 447}; char _4E2AD8_ui_colors[72]; char _4E2B21_buff_spell_tooltip_colors[80]; -char byte_4E2B70[777]; // weak +char monster_popup_y_offsets[88] = +{ + 236, 20, 0, 216, 0, 0, 0, 0, 0, 0, 206, + 20, 0, 246, 246, 236, 10, 246, 0, 0, 0, 236, + 10, 246, 0, 0, 0, 236, 246, 0, 0, 0, 216, + 236, 0, 0, 0, 206, 226, 226, 226, 226, 226, 226, + 0, 0, 0, 0, 0, 0, 236, 236, 236, 20, 20, + 20, 10, 10, 10, 10, 10, 10, 166, 196, 216, 236, + 236, 176, 246, 0, 0, 216, 0, 0, 0, 236, 10, + 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0 +}; unsigned char hourglass_icon_idx = 12; // weak char aSS[777]; // idb @@ -2101,10 +2111,6 @@ int dword_721110[777]; // idb int dword_721160[777]; // idb int odm_floor_level[20]; // idb -int dword_721200[777]; // idb -int blv_floor_level[50]; // idb dword_7212C8 -__int16 word_721390[104]; // idb -__int16 word_721460[104]; // idb int blv_prev_party_x; // weak int blv_prev_party_z; // weak int blv_prev_party_y; // weak diff -r 14cf77af15de -r cd9ae9a2c99c mm7_data.h --- a/mm7_data.h Fri Mar 22 19:58:47 2013 +0600 +++ b/mm7_data.h Fri Mar 22 19:59:03 2013 +0600 @@ -472,7 +472,7 @@ extern unsigned int pManaBarPos[4]; extern char _4E2AD8_ui_colors[72]; extern char _4E2B21_buff_spell_tooltip_colors[80]; -extern char byte_4E2B70[]; // weak +extern char monster_popup_y_offsets[]; // weak extern unsigned char hourglass_icon_idx; // weak extern char aSS[]; // idb @@ -1560,10 +1560,6 @@ extern int dword_721110[]; // idb extern int dword_721160[]; // idb extern int odm_floor_level[20]; // idb dword_7211B0 -extern int dword_721200[]; // idb -extern int blv_floor_level[50]; // idb -extern __int16 word_721390[]; // idb -extern __int16 word_721460[]; // idb extern int blv_prev_party_x; // weak extern int blv_prev_party_z; // weak extern int blv_prev_party_y; // weak @@ -1896,7 +1892,7 @@ bool __thiscall sub_41CD4F(unsigned int _this); char __fastcall sub_41D20D_buff_remaining_time_string(int ecx0, struct GUIWindow *edx0, __int64 a3, struct GUIFont *a2); void GameUI_DrawItemInfo(struct ItemGen* inspect_item); // idb -char *__fastcall MonsterPopup_Draw(unsigned int uActorID, struct GUIWindow *edx0); +void MonsterPopup_Draw(unsigned int uActorID, struct GUIWindow *edx0); void __cdecl nullsub_3(); // idb void __cdecl LoadActualSkyFrame(); void __cdecl Sleep6Hours(); @@ -1956,9 +1952,6 @@ void __cdecl nullsub_4(); // idb void __cdecl nullsub_5(); // idb void __cdecl nullsub_6(); // idb -__int16 __thiscall sub_4382BC(int _this); -int __cdecl sub_4383ED(); -__int16 __cdecl sub_43847A(); void __cdecl _438F8F_area_of_effect__damage_evaluate(); void __fastcall DamagePlayerFromMonster(unsigned int uObjID, int a2, struct Vec3_int_ *pPos, unsigned int a4); void __fastcall sub_43A97E(unsigned int uLayingItemID, signed int a2); // idb @@ -2274,10 +2267,7 @@ int __fastcall GetSoundStrengthByDistanceFromParty(int a1, int a2, int a3); struct _DIG_DRIVER *Audio_GetFirstHardwareDigitalDriver(void); void __cdecl PlayLevelMusic(); -int __thiscall sub_4AC1C9(unsigned int _this, Vec4_int_ *a2); -struct Vec4_int_ *__thiscall sub_4AC277(unsigned int _this, Vec4_int_ *a2); -struct Vec4_int_ *__thiscall sub_4AC33A_get_cpu_clocks_QPC(int _this, Vec4_int_ *a1); -struct Vec4_int_ *__thiscall sub_4AC4FD_get_cpu_clocks_rdtsc(int _this, Vec4_int_ *a1); +struct Vec4_int_ *__thiscall _4AC277_get_cpu_speed_sub3(unsigned int _this, Vec4_int_ *a2); int __fastcall sub_4AD504(signed int uFaceID); void __fastcall sub_4ADD1D(int uFaceID); int __fastcall sub_4AE1E7(int a1, int a2, int a3); diff -r 14cf77af15de -r cd9ae9a2c99c stru6.cpp --- a/stru6.cpp Fri Mar 22 19:58:47 2013 +0600 +++ b/stru6.cpp Fri Mar 22 19:59:03 2013 +0600 @@ -1537,7 +1537,7 @@ vsr.uViewportW = pViewport->uViewportBR_Y; vsr.uFlags = 0; if ( v11 >= 0 ) - pSprites_LOD->pSpriteHeaders[v11]._4ACC38(&vsr, 1); + pSprites_LOD->pSpriteHeaders[v11].DrawSprite_sw(&vsr, 1); } } }