Mercurial > mm7
diff mm7_3.cpp @ 707:436ae1842e92
Decorations in blv
author | Nomad |
---|---|
date | Thu, 21 Mar 2013 10:21:46 +0200 |
parents | d6236f6a9882 |
children | af5771589d22 |
line wrap: on
line diff
--- a/mm7_3.cpp Tue Mar 19 21:53:21 2013 +0400 +++ b/mm7_3.cpp Thu Mar 21 10:21:46 2013 +0200 @@ -11207,19 +11207,19 @@ char v16; // zf@18 IndoorCameraD3D **v17; // eax@19 double v18; // st7@19 - float v19; // eax@19 + //float v19; // eax@19 signed __int64 v20; // qtt@19 signed __int64 v21; // qtt@20 - int v22; // edx@21 - int v23; // eax@21 + //int v22; // edx@21 + //int v23; // eax@21 Particle_sw local_0; // [sp+Ch] [bp-A0h]@3 - double v25; // [sp+74h] [bp-38h]@19 - unsigned int v26; // [sp+7Ch] [bp-30h]@1 + //double v25; // [sp+74h] [bp-38h]@19 + //unsigned int v26; // [sp+7Ch] [bp-30h]@1 int a2; // [sp+80h] [bp-2Ch]@5 int a3; // [sp+84h] [bp-28h]@5 int a1; // [sp+88h] [bp-24h]@5 int v30; // [sp+8Ch] [bp-20h]@7 - float v31; // [sp+90h] [bp-1Ch]@1 + //float v31; // [sp+90h] [bp-1Ch]@1 int a5; // [sp+94h] [bp-18h]@17 int z; // [sp+98h] [bp-14h]@15 int a6; // [sp+9Ch] [bp-10h]@17 @@ -11227,17 +11227,37 @@ int x; // [sp+A4h] [bp-8h]@15 int v37; // [sp+A8h] [bp-4h]@5 - v26 = uDecorationID; - LODWORD(v31) = uSectorID; + //v26 = uDecorationID; + //LODWORD(v31) = uSectorID; v2 = &pLevelDecorations[uDecorationID]; - if ( !(v2->field_2 & 0x20) ) - { + if (v2->field_2 & 0x20) + return; + v3 = &pDecorationList->pDecorations[v2->uDecorationDescID]; v4 = v3->uFlags; - if ( (char)v4 >= 0 ) - { - if ( !(v4 & DECORATION_DONT_DRAW) ) - { + if (v3->uFlags & DECORATION_EMITS_FIRE) + { + memset(&local_0, 0, 0x68u); // fire, like at the Pit's tavern + v5 = (double)v2->vPosition.x; + local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; + local_0.uDiffuse = 0xFF3C1E; + local_0.x = v5; + local_0.y = (double)v2->vPosition.y; + local_0.z = (double)v2->vPosition.z; + local_0.flt_10 = 0.0; + local_0.flt_14 = 0.0; + local_0.flt_18 = 0.0; + local_0.flt_28 = 1.0; + local_0.timeToLive = (rand() & 0x80) + 128; + local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01"); + pGame->pParticleEngine->AddParticle(&local_0); + return; + } + + + if (v4 & DECORATION_DONT_DRAW) + return; + v6 = v2->vPosition.x; v7 = v2->vPosition.z; a2 = v2->vPosition.y; @@ -11248,7 +11268,7 @@ - stru_5C6E00->Atan2(v6 - pBLVRenderParams->vPartyPos.x, a2 - pBLVRenderParams->vPartyPos.y); v37 = pBLVRenderParams->field_0_timer_; v9 = ((signed int)(stru_5C6E00->uIntegerPi + v8) >> 8) & 7; - if ( pParty->bTurnBasedModeOn == 1 ) + if (pParty->bTurnBasedModeOn) v37 = pMiscTimer->uTotalGameTimeElapsed; v10 = abs(v2->vPosition.x + v2->vPosition.y); v11 = pSpriteFrameTable->GetFrame(v3->uSpriteID, v37 + v10); @@ -11269,23 +11289,24 @@ if ( v14 >= abs(y) ) { pGame->pIndoorCameraD3D->Project(x, y, z, &a5, &a6); + v15 = &pBillboardRenderList[uNumBillboardsToDraw]; - if ( (signed int)uNumBillboardsToDraw < 500 ) - { + assert(uNumBillboardsToDraw < 500); + ++uNumBillboardsToDraw; ++uNumDecorationsDrawnThisFrame; v16 = pRenderer->pRenderD3D == 0; v15->uHwSpriteID = v12->pHwSpriteIDs[v9]; v15->uPalette = v12->uPaletteIndex; - v15->uIndoorSectorID = LOWORD(v31); + v15->uIndoorSectorID = uSectorID; if ( v16 ) { LODWORD(v21) = pBLVRenderParams->field_40 << 16; HIDWORD(v21) = pBLVRenderParams->field_40 >> 16; v37 = v21 / x; - LODWORD(v31) = v12->scale; + //LODWORD(v31) = v12->scale; v37 = v21 / x; - v15->_screenspace_x_scaler_packedfloat = (unsigned __int64)(SLODWORD(v31) * v21 / x) >> 16; + v15->_screenspace_x_scaler_packedfloat = (unsigned __int64)(v12->scale * v21 / x) >> 16; v37 = (unsigned __int64)(v12->scale * (signed __int64)v37) >> 16; } else @@ -11293,24 +11314,27 @@ v17 = &pGame->pIndoorCameraD3D; v15->fov_x = pGame->pIndoorCameraD3D->fov_x; v18 = (*v17)->fov_y; - v19 = v15->fov_x; + //v19 = v15->fov_x; v15->fov_y = v18; - v31 = v19; - v25 = v19 + 6.7553994e15; + //v31 = v19; + //v25 = v19 + 6.7553994e15; + //v25 = floorf(v15->fov_x + 0.5f); LODWORD(v20) = 0; - HIDWORD(v20) = SLOWORD(v25); + HIDWORD(v20) = floorf(v15->fov_x + 0.5f); v37 = v20 / x; - LODWORD(v31) = v12->scale; - v37 = (unsigned __int64)(SLODWORD(v31) * v20 / x) >> 16; - v15->_screenspace_x_scaler_packedfloat = (unsigned __int64)(SLODWORD(v31) * v20 / x) >> 16; - v31 = v15->fov_y; - v25 = v31 + 6.7553994e15; + //LODWORD(v31) = v12->scale; + v37 = (unsigned __int64)(v12->scale * v20 / x) >> 16; + v15->_screenspace_x_scaler_packedfloat = (unsigned __int64)(v12->scale * v20 / x) >> 16; + //v31 = v15->fov_y; + //v25 = v31 + 6.7553994e15; + //v25 = floorf(v15->fov_y + 0.5f); LODWORD(v20) = 0; - HIDWORD(v20) = SLOWORD(v25); + HIDWORD(v20) = floorf(v15->fov_y + 0.5f); v37 = v20 / x; v37 = (unsigned __int64)(v12->scale * v20 / x) >> 16; } - HIWORD(v22) = HIWORD(x); + //HIWORD(v22) = HIWORD(x); + //LOWORD(v22) = 0; v15->_screenspace_y_scaler_packedfloat = v37; v15->field_1E = v30; v15->world_x = a1; @@ -11318,39 +11342,17 @@ v15->world_z = a3; v15->uScreenSpaceX = a5; v15->uScreenSpaceY = a6; - v23 = 8 * v26; - LOBYTE(v23) = 8 * v26 | OBJECT_Decoration; - LOWORD(v22) = 0; + //v23 = 8 * uDecorationID; + //LOBYTE(v23) = 8 * uDecorationID | OBJECT_Decoration; //v15->sZValue = v22 + v23; v15->actual_z = HIWORD(x); - v15->object_pid = 8 * v26 | OBJECT_Decoration; + v15->object_pid = 8 * uDecorationID | OBJECT_Decoration; v15->uTintColor = 0; v15->pSpriteFrame = v12; - } - } - } - } - } - else - { - memset(&local_0, 0, 0x68u); // fire, like at the Pit's tavern - v5 = (double)v2->vPosition.x; - local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; - local_0.uDiffuse = 0xFF3C1E; - local_0.x = v5; - local_0.y = (double)v2->vPosition.y; - local_0.z = (double)v2->vPosition.z; - local_0.flt_10 = 0.0; - local_0.flt_14 = 0.0; - local_0.flt_18 = 0.0; - local_0.flt_28 = 1.0; - local_0.timeToLive = (rand() & 0x80) + 128; - local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01"); - pGame->pParticleEngine->AddParticle(&local_0); - } - } + } + } } @@ -11423,8 +11425,7 @@ if ( v30 & 0x20 ) { v8 = v30; - a3 -= (signed int)((unsigned __int64)(v5->scale - * (signed __int64)pSprites_LOD->pSpriteHeaders[(signed __int16)v10].uHeight) >> 16) >> 1; + a3 -= (signed int)((unsigned __int64)(v5->scale * (signed __int64)pSprites_LOD->pSpriteHeaders[(signed __int16)v10].uHeight) >> 16) >> 1; } v34 = 0; if ( v8 & 2 )