Mercurial > mm7
changeset 717:d5473972234d
m
author | Ritor1 |
---|---|
date | Mon, 18 Mar 2013 01:50:50 +0600 |
parents | 964323fa0d25 |
children | a5ee769b02c6 |
files | Indoor.cpp Render.cpp Render.h SpriteObject.cpp UIHouses.cpp mm7_3.cpp mm7_4.cpp |
diffstat | 7 files changed, 438 insertions(+), 438 deletions(-) [+] |
line wrap: on
line diff
--- a/Indoor.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/Indoor.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -3160,10 +3160,10 @@ //Vec3_short_ *v34; // edx@27 int v35; // edx@32 int v37; // edi@38 - int v38; // ebx@40 + int pSectorID; // ebx@40 int v39; // eax@41 - BLVFace *v40; // esi@42 - PolygonType v41; // dl@42 + BLVFace *pFace; // esi@42 + PolygonType pPolygonType; // dl@42 int v42; // edx@43 int v43[50]; // [sp+Ch] [bp-108h]@1 //int v44; // [sp+D4h] [bp-40h]@9 @@ -3236,10 +3236,10 @@ //pVertexIDs = pFace->pVertexIDs; //v19 = this->pVertices; //v20 = pVertices[pFace->pVertexIDs[0]].y; - v54 = 0; - //v57 = 0; - //v5 = v16->uNumVertices == 0; - v59 = pVertices[pFace->pVertexIDs[0]].y >= sY; + v54 = 0; + //v57 = 0; + //v5 = v16->uNumVertices == 0; + v59 = pVertices[pFace->pVertexIDs[0]].y >= sY; //v21 = pFace->pVertexIDs + 1; for (uint k = 1; k < pFace->uNumVertices; ++k) @@ -3297,24 +3297,24 @@ ++v54; } } - } - } - - v59 = v50; - } - - if (pFace->uNumVertices) - { - if (v54 == 1) - { - v35 = v55++; - v43[v35] = uFaceID; - } - } - } + } + } + + v59 = v50; + } + + if (pFace->uNumVertices) + { + if (v54 == 1) + { + v35 = v55++; + v43[v35] = uFaceID; + } + } } - v4 = v43[0]; } + v4 = v43[0]; + } } if ( v55 == 1 ) @@ -3322,45 +3322,46 @@ v37 = 0; if ( !v55 ) return 0; - v38 = 0; + pSectorID = 0; v53 = 0xFFFFFFu; if ( v55 > 0 ) { v39 = sY; while ( 1 ) { - v40 = &this->pFaces[v43[v37]]; - v41 = v40->uPolygonType; - if ( v41 == 3 ) - break; - if ( v41 == 4 ) + pFace = &this->pFaces[v43[v37]]; + //pPolygonType = pFace->uPolygonType; + if ( pFace->uPolygonType == POLYGON_Floor ) { - v51 = v40->zCalc1; - v57 = (unsigned __int64)(v51 * (signed __int64)(sX << 16)) >> 16; - v56 = sY << 16; - v51 = v40->zCalc2; - v56 = (unsigned __int64)(v51 * (signed __int64)(sY << 16)) >> 16; - v42 = (v56 + v40->zCalc3 + v57 + 32768) >> 16; + v42 = this->pVertices[*pFace->pVertexIDs].z; + v39 = sZ - v42; + //goto LABEL_47; + } + if ( pFace->uPolygonType == POLYGON_InBetweenFloorAndWall ) + { + //v51 = pFace->zCalc1; + v57 = (unsigned __int64)(pFace->zCalc1 * (signed __int64)(sX << 16)) >> 16; + //v56 = sY << 16; + //v51 = pFace->zCalc2; + v56 = (unsigned __int64)(pFace->zCalc2 * (signed __int64)(sY << 16)) >> 16; + v42 = (v56 + pFace->zCalc3 + v57 + 32768) >> 16; v39 = sZ - v42; } -LABEL_47: +//LABEL_47: if ( v39 >= 0 ) { if ( v39 < v53 ) { - v38 = v40->uSectorID; + pSectorID = pFace->uSectorID; v53 = v39; } } ++v37; if ( v37 >= v55 ) - return v38; + return pSectorID; } - v42 = this->pVertices[*v40->pVertexIDs].z; - v39 = sZ - v42; - goto LABEL_47; } - return v38; + //return pSectorID; } // 49AC17: using guessed type int var_108[50];
--- a/Render.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/Render.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -7213,7 +7213,7 @@ } ++v7; } -LABEL_23: +//LABEL_23: uNumBillboardsToDraw++; return v7; } @@ -7231,7 +7231,9 @@ } while ( v12 ); } - goto LABEL_23; + //goto LABEL_23; + uNumBillboardsToDraw++; + return v7; } return v7; } @@ -8075,19 +8077,19 @@ //----- (004A43B1) -------------------------------------------------------- -void Render::DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int dimming_level) -{ - RenderBillboardTransform_local0 *v4; // ebx@2 - double v5; // st7@2 - float v6; // ST08_4@2 +void Render::DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *pSprite, int dimming_level) +{ + //RenderBillboardTransform_local0 *v4; // ebx@2 + //double v5; // st7@2 + //float v6; // ST08_4@2 unsigned int v7; // eax@2 - int v8; // ecx@2 - unsigned int v9; // esi@2 - Sprite *v10; // edi@5 + //int v8; // ecx@2 + //unsigned int v9; // esi@2 + //Sprite *v10; // edi@5 signed int v11; // eax@9 signed int v12; // eax@9 - double v13; // st7@12 - double v14; // st6@12 + //double v13; // st7@12 + //double v14; // st6@12 double v15; // st5@12 double v16; // st4@12 double v17; // st3@12 @@ -8096,109 +8098,109 @@ double v20; // st3@14 int v21; // ecx@16 double v22; // st3@16 - IDirect3DTexture2 *v23; // eax@18 - signed int v24; // [sp+18h] [bp-18h]@5 - signed int v25; // [sp+1Ch] [bp-14h]@5 - Render *v26; // [sp+20h] [bp-10h]@1 + //IDirect3DTexture2 *v23; // eax@18 + //signed int v24; // [sp+18h] [bp-18h]@5 + //signed int v25; // [sp+1Ch] [bp-14h]@5 + //Render *v26; // [sp+20h] [bp-10h]@1 float v27; // [sp+24h] [bp-Ch]@5 int v28; // [sp+28h] [bp-8h]@2 float v29; // [sp+2Ch] [bp-4h]@5 - float pSoftBillboarda; // [sp+38h] [bp+8h]@2 + //float pSoftBillboarda; // [sp+38h] [bp+8h]@2 float v31; // [sp+3Ch] [bp+Ch]@5 - float v32; // [sp+3Ch] [bp+Ch]@12 + //float v32; // [sp+3Ch] [bp+Ch]@12 float a1; // [sp+40h] [bp+10h]@5 - v26 = this; + //v26 = this; if ( this->uNumD3DSceneBegins ) { - v4 = pSoftBillboard; - v5 = (double)pSoftBillboard->zbuffer_depth; - pSoftBillboarda = v5; - v6 = v5; - v7 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v6)); - v8 = dimming_level; - v9 = v7; + //v4 = pSoftBillboard; + //v5 = (double)pSoftBillboard->zbuffer_depth; + //pSoftBillboarda = pSoftBillboard->zbuffer_depth; + //v6 = pSoftBillboard->zbuffer_depth; + v7 = Billboard_ProbablyAddToListAndSortByZOrder(pSoftBillboard->zbuffer_depth); + //v8 = dimming_level; + //v9 = v7; v28 = dimming_level & 0xFF000000; if ( dimming_level & 0xFF000000 ) - pBillboardRenderListD3D[v9].uOpacity = RenderBillboardD3D::Opaque_3; + pBillboardRenderListD3D[v7].uOpacity = RenderBillboardD3D::Opaque_3; else - pBillboardRenderListD3D[v9].uOpacity = RenderBillboardD3D::Transparent; - v10 = a3; - pBillboardRenderListD3D[v9].field_90 = v4->field_44; - pBillboardRenderListD3D[v9].sZValue = v4->sZValue; - pBillboardRenderListD3D[v9].uParentBillboardID = v4->uParentBillboardID; - v25 = v4->uScreenSpaceX; - v24 = v4->uScreenSpaceY; - a1 = (v4->_screenspace_x_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(v4->_screenspace_x_scaler_packedfloat); - v29 = (v4->_screenspace_y_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(v4->_screenspace_y_scaler_packedfloat); - v31 = (double)((v10->uBufferWidth >> 1) - v10->uAreaX); - v27 = (double)(v10->uBufferHeight - v10->uAreaY); - if ( v4->uFlags & 4 ) + pBillboardRenderListD3D[v7].uOpacity = RenderBillboardD3D::Transparent; + //v10 = a3; + pBillboardRenderListD3D[v7].field_90 = pSoftBillboard->field_44; + pBillboardRenderListD3D[v7].sZValue = pSoftBillboard->sZValue; + pBillboardRenderListD3D[v7].uParentBillboardID = pSoftBillboard->uParentBillboardID; + //v25 = pSoftBillboard->uScreenSpaceX; + //v24 = pSoftBillboard->uScreenSpaceY; + a1 = (pSoftBillboard->_screenspace_x_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(pSoftBillboard->_screenspace_x_scaler_packedfloat); + v29 = (pSoftBillboard->_screenspace_y_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(pSoftBillboard->_screenspace_y_scaler_packedfloat); + v31 = (double)((pSprite->uBufferWidth >> 1) - pSprite->uAreaX); + v27 = (double)(pSprite->uBufferHeight - pSprite->uAreaY); + if ( pSoftBillboard->uFlags & 4 ) v31 = v31 * -1.0; - if ( v4->uTintColor && v26->bTinting ) - { - v11 = ::GetActorTintColor(dimming_level, 0, pSoftBillboarda, 0, 0); - v12 = sub_4A19D8(v4->uTintColor, v11); + if ( pSoftBillboard->uTintColor && this->bTinting ) + { + v11 = ::GetActorTintColor(dimming_level, 0, pSoftBillboard->zbuffer_depth, 0, 0); + v12 = sub_4A19D8(pSoftBillboard->uTintColor, v11); if ( v28 ) v12 = (unsigned int)((char *)&array_77EC08[1852].pEdgeList1[17] + 3) & ((unsigned int)v12 >> 1); } else { - v12 = ::GetActorTintColor(dimming_level, 0, pSoftBillboarda, 0, 0); - } - v13 = (double)v25; - pBillboardRenderListD3D[v9].pQuards[0].specular = 0; - pBillboardRenderListD3D[v9].pQuards[0].diffuse = v12; - pBillboardRenderListD3D[v9].pQuards[0].pos.x = v13 - v31 * a1; - v14 = (double)v24; - v32 = v14; - pBillboardRenderListD3D[v9].pQuards[0].pos.y = v14 - v27 * v29; - v15 = 1.0 - 1.0 / (pSoftBillboarda * 0.061758894); - pBillboardRenderListD3D[v9].pQuards[0].pos.z = v15; - v16 = 1.0 / pSoftBillboarda; - pBillboardRenderListD3D[v9].pQuards[0].rhw = 1.0 / pSoftBillboarda; - pBillboardRenderListD3D[v9].pQuards[0].texcoord.x = 0.0; - pBillboardRenderListD3D[v9].pQuards[0].texcoord.y = 0.0; - v17 = (double)((v10->uBufferWidth >> 1) - v10->uAreaX); - v18 = (double)(v10->uBufferHeight - v10->uAreaY - v10->uAreaHeight); - if ( v4->uFlags & 4 ) + v12 = ::GetActorTintColor(dimming_level, 0, pSoftBillboard->zbuffer_depth, 0, 0); + } + //v13 = (double)v25; + pBillboardRenderListD3D[v7].pQuards[0].specular = 0; + pBillboardRenderListD3D[v7].pQuards[0].diffuse = v12; + pBillboardRenderListD3D[v7].pQuards[0].pos.x = pSoftBillboard->uScreenSpaceX - v31 * a1; + //v14 = (double)v24; + //v32 = v14; + pBillboardRenderListD3D[v7].pQuards[0].pos.y = pSoftBillboard->uScreenSpaceY - v27 * v29; + v15 = 1.0 - 1.0 / (pSoftBillboard->zbuffer_depth * 0.061758894); + pBillboardRenderListD3D[v7].pQuards[0].pos.z = v15; + v16 = 1.0 / pSoftBillboard->zbuffer_depth; + pBillboardRenderListD3D[v7].pQuards[0].rhw = 1.0 / pSoftBillboard->zbuffer_depth; + pBillboardRenderListD3D[v7].pQuards[0].texcoord.x = 0.0; + pBillboardRenderListD3D[v7].pQuards[0].texcoord.y = 0.0; + v17 = (double)((pSprite->uBufferWidth >> 1) - pSprite->uAreaX); + v18 = (double)(pSprite->uBufferHeight - pSprite->uAreaY - pSprite->uAreaHeight); + if ( pSoftBillboard->uFlags & 4 ) v17 = v17 * -1.0; - pBillboardRenderListD3D[v9].pQuards[1].specular = 0; - pBillboardRenderListD3D[v9].pQuards[1].diffuse = v12; - pBillboardRenderListD3D[v9].pQuards[1].pos.x = v13 - v17 * a1; - pBillboardRenderListD3D[v9].pQuards[1].pos.y = v32 - v18 * v29; - pBillboardRenderListD3D[v9].pQuards[1].pos.z = v15; - pBillboardRenderListD3D[v9].pQuards[1].rhw = v16; - pBillboardRenderListD3D[v9].pQuards[1].texcoord.x = 0.0; - pBillboardRenderListD3D[v9].pQuards[1].texcoord.y = 1.0; - v19 = v10->uBufferHeight - v10->uAreaY - v10->uAreaHeight; - v20 = (double)(v10->uAreaX + v10->uAreaWidth + (v10->uBufferWidth >> 1) - v10->uBufferWidth); - if ( v4->uFlags & 4 ) + pBillboardRenderListD3D[v7].pQuards[1].specular = 0; + pBillboardRenderListD3D[v7].pQuards[1].diffuse = v12; + pBillboardRenderListD3D[v7].pQuards[1].pos.x = pSoftBillboard->uScreenSpaceX - v17 * a1; + pBillboardRenderListD3D[v7].pQuards[1].pos.y = pSoftBillboard->uScreenSpaceY - v18 * v29; + pBillboardRenderListD3D[v7].pQuards[1].pos.z = v15; + pBillboardRenderListD3D[v7].pQuards[1].rhw = v16; + pBillboardRenderListD3D[v7].pQuards[1].texcoord.x = 0.0; + pBillboardRenderListD3D[v7].pQuards[1].texcoord.y = 1.0; + v19 = pSprite->uBufferHeight - pSprite->uAreaY - pSprite->uAreaHeight; + v20 = (double)(pSprite->uAreaX + pSprite->uAreaWidth + (pSprite->uBufferWidth >> 1) - pSprite->uBufferWidth); + if ( pSoftBillboard->uFlags & 4 ) v20 = v20 * -1.0; - pBillboardRenderListD3D[v9].pQuards[2].specular = 0; - pBillboardRenderListD3D[v9].pQuards[2].diffuse = v12; - pBillboardRenderListD3D[v9].pQuards[2].pos.x = v20 * a1 + v13; - pBillboardRenderListD3D[v9].pQuards[2].pos.y = v32 - (double)v19 * v29; - pBillboardRenderListD3D[v9].pQuards[2].pos.z = v15; - pBillboardRenderListD3D[v9].pQuards[2].rhw = v16; - pBillboardRenderListD3D[v9].pQuards[2].texcoord.x = 1.0; - pBillboardRenderListD3D[v9].pQuards[2].texcoord.y = 1.0; - v21 = v10->uBufferHeight - v10->uAreaY; - v22 = (double)(v10->uAreaX + v10->uAreaWidth + (v10->uBufferWidth >> 1) - v10->uBufferWidth); - if ( v4->uFlags & 4 ) + pBillboardRenderListD3D[v7].pQuards[2].specular = 0; + pBillboardRenderListD3D[v7].pQuards[2].diffuse = v12; + pBillboardRenderListD3D[v7].pQuards[2].pos.x = v20 * a1 + pSoftBillboard->uScreenSpaceX; + pBillboardRenderListD3D[v7].pQuards[2].pos.y = pSoftBillboard->uScreenSpaceY - (double)v19 * v29; + pBillboardRenderListD3D[v7].pQuards[2].pos.z = v15; + pBillboardRenderListD3D[v7].pQuards[2].rhw = v16; + pBillboardRenderListD3D[v7].pQuards[2].texcoord.x = 1.0; + pBillboardRenderListD3D[v7].pQuards[2].texcoord.y = 1.0; + v21 = pSprite->uBufferHeight - pSprite->uAreaY; + v22 = (double)(pSprite->uAreaX + pSprite->uAreaWidth + (pSprite->uBufferWidth >> 1) - pSprite->uBufferWidth); + if ( pSoftBillboard->uFlags & 4 ) v22 = v22 * -1.0; - pBillboardRenderListD3D[v9].pQuards[3].specular = 0; - pBillboardRenderListD3D[v9].pQuards[3].diffuse = v12; - pBillboardRenderListD3D[v9].pQuards[3].pos.x = v22 * a1 + v13; - pBillboardRenderListD3D[v9].pQuards[3].pos.y = v32 - (double)v21 * v29; - pBillboardRenderListD3D[v9].pQuards[3].pos.z = v15; - pBillboardRenderListD3D[v9].pQuards[3].rhw = v16; - pBillboardRenderListD3D[v9].pQuards[3].texcoord.x = 1.0; - pBillboardRenderListD3D[v9].pQuards[3].texcoord.y = 0.0; - v23 = v10->pTexture; - pBillboardRenderListD3D[v9].uNumVertices = 4; - pBillboardRenderListD3D[v9].z_order = pSoftBillboarda; - pBillboardRenderListD3D[v9].pTexture = v23; + pBillboardRenderListD3D[v7].pQuards[3].specular = 0; + pBillboardRenderListD3D[v7].pQuards[3].diffuse = v12; + pBillboardRenderListD3D[v7].pQuards[3].pos.x = v22 * a1 + pSoftBillboard->uScreenSpaceX; + pBillboardRenderListD3D[v7].pQuards[3].pos.y = pSoftBillboard->uScreenSpaceY - (double)v21 * v29; + pBillboardRenderListD3D[v7].pQuards[3].pos.z = v15; + pBillboardRenderListD3D[v7].pQuards[3].rhw = v16; + pBillboardRenderListD3D[v7].pQuards[3].texcoord.x = 1.0; + pBillboardRenderListD3D[v7].pQuards[3].texcoord.y = 0.0; + //v23 = pSprite->pTexture; + pBillboardRenderListD3D[v7].uNumVertices = 4; + pBillboardRenderListD3D[v7].z_order = pSoftBillboard->zbuffer_depth; + pBillboardRenderListD3D[v7].pTexture = pSprite->pTexture; } }
--- a/Render.h Sat Mar 16 17:42:59 2013 +0600 +++ b/Render.h Mon Mar 18 01:50:50 2013 +0600 @@ -329,7 +329,7 @@ void MakeParticleBillboardAndPush_BLV(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle); void MakeParticleBillboardAndPush_ODM(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle); void TransformBillboard(RenderBillboardTransform_local0 *a2, Sprite *pSprite, int dimming_level, RenderBillboard *pBillboard); - void DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int dimming_level); + void DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *pSprite, int dimming_level); int MakeParticleBillboardAndPush_BLV_Software(int screenSpaceX, int screenSpaceY, int z, int lightColor, int a6); void DrawProjectile(float srcX, float srcY, float a3, float a4, float dstX, float dstY, float a7, float a8, IDirect3DTexture2 *a9); void _4A4CC9(struct stru6_stru1_indoor_sw_billboard *a1, int a2);
--- a/SpriteObject.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/SpriteObject.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -594,10 +594,10 @@ //----- (0047136C) -------------------------------------------------------- void SpriteObject::UpdateObject_fn0_BLV(unsigned int uLayingItemID) { - SpriteObject *v1; // esi@1 - ObjectDesc *v2; // edi@1 - int v3; // ST08_4@1 - __int16 v4; // ax@5 + SpriteObject *pSpriteObject; // esi@1 + ObjectDesc *pObject; // edi@1 + //int v3; // ST08_4@1 + //__int16 v4; // ax@5 __int16 v5; // ax@7 BLVFace *v6; // ecx@11 BLVFace *v7; // eax@11 @@ -629,8 +629,8 @@ enum TEXTURE_TYPE v33; // [sp-4h] [bp-94h]@19 enum TEXTURE_TYPE v34; // [sp-4h] [bp-94h]@68 Particle_sw Dst; // [sp+Ch] [bp-84h]@18 - unsigned int uLayingItemID_; // [sp+74h] [bp-1Ch]@1 - ObjectDesc *v37; // [sp+78h] [bp-18h]@1 + //unsigned int uLayingItemID_; // [sp+74h] [bp-1Ch]@1 + //ObjectDesc *v37; // [sp+78h] [bp-18h]@1 unsigned int uFaceID; // [sp+7Ch] [bp-14h]@4 int v39; // [sp+80h] [bp-10h]@33 Actor *v39b; @@ -638,24 +638,24 @@ int v41; // [sp+88h] [bp-8h]@34 int v42; // [sp+8Ch] [bp-4h]@4 - uLayingItemID_ = uLayingItemID; - v1 = &pSpriteObjects[uLayingItemID]; - v2 = &pObjectList->pObjects[v1->uObjectDescID]; - v3 = v1->vPosition.x; - v37 = &pObjectList->pObjects[v1->uObjectDescID]; - if ( abs(v3) > 32767 - || abs(v1->vPosition.y) > 32767 - || abs(v1->vPosition.z) > 20000 - || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v1->uSectorID, &uFaceID), - v42 <= -30000) - && ((v4 = pIndoor->GetSector(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z), - (v1->uSectorID = v4) == 0) - || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v4, &uFaceID), v42 == -30000)) ) + //uLayingItemID_ = uLayingItemID; + pSpriteObject = &pSpriteObjects[uLayingItemID]; + pObject = &pObjectList->pObjects[pSpriteObject->uObjectDescID]; + //v3 = pSpriteObject->vPosition.x; + //v37 = &pObjectList->pObjects[pSpriteObject->uObjectDescID]; + pSpriteObject->uSectorID = pIndoor->GetSector(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z); + v42 = _46CEC3_get_floor_level(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z, pSpriteObject->uSectorID, &uFaceID); + if ( abs(pSpriteObject->vPosition.x) > 32767 + || abs(pSpriteObject->vPosition.y) > 32767 + || abs(pSpriteObject->vPosition.z) > 20000 + || v42 <= -30000 + && (pSpriteObject->uSectorID == 0)) +// || (v42 = _46CEC3_get_floor_level(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z, v4, &uFaceID), v42 == -30000)) ) { - SpriteObject::OnInteraction(uLayingItemID_); + SpriteObject::OnInteraction(uLayingItemID); return; } - v5 = v2->uFlags; + v5 = pObject->uFlags; if ( v5 & 0x20 ) { LABEL_24: @@ -663,24 +663,24 @@ LABEL_25: stru_721530.field_0 = v8; uFaceID = v8; - stru_721530.prolly_normal_d = v2->uRadius; - v12 = v2->uHeight; + stru_721530.prolly_normal_d = pObject->uRadius; + v12 = pObject->uHeight; stru_721530.field_84 = -1; stru_721530.field_C = v12; stru_721530.field_8 = v8; stru_721530.field_70 = v8; while ( 1 ) { - stru_721530.field_34.x = v1->vPosition.x; + stru_721530.field_34.x = pSpriteObject->vPosition.x; stru_721530.normal.x = stru_721530.field_34.x; - stru_721530.field_34.y = v1->vPosition.y; + stru_721530.field_34.y = pSpriteObject->vPosition.y; stru_721530.normal.y = stru_721530.field_34.y; - stru_721530.field_34.z = stru_721530.prolly_normal_d + v1->vPosition.z + 1; + stru_721530.field_34.z = stru_721530.prolly_normal_d + pSpriteObject->vPosition.z + 1; stru_721530.normal.z = stru_721530.field_34.z; - stru_721530.field_1C = v1->vVelocity.x; - stru_721530.field_20 = v1->vVelocity.y; - stru_721530.field_24 = v1->vVelocity.z; - stru_721530.uSectorID = v1->uSectorID; + stru_721530.field_1C = pSpriteObject->vVelocity.x; + stru_721530.field_20 = pSpriteObject->vVelocity.y; + stru_721530.field_24 = pSpriteObject->vVelocity.z; + stru_721530.uSectorID = pSpriteObject->uSectorID; if ( stru_721530._47050A(v8) ) return; v40 = v8; @@ -688,9 +688,9 @@ { _46E44E_collide_against_faces_and_portals(0); _46E0B2_collide_against_decorations(); - if ( (v1->field_58_pid & 7) != OBJECT_Player) + if ( (pSpriteObject->field_58_pid & 7) != OBJECT_Player) _46EF01_collision_chech_player(1); - v13 = v1->field_58_pid; + v13 = pSpriteObject->field_58_pid; v42 = v8; if ( (v13 & 7) == OBJECT_Actor) { @@ -703,7 +703,7 @@ //v14 = (signed __int64)((double)v41 * 0.3333333333333333); //v41 = *(short *)(v39 - 38) - 1; //if ( v14 != (unsigned int)(signed __int64)((double)v41 * 0.3333333333333333) ) - if( pActors[v1->field_58_pid >> 3].pMonsterInfo.uID != v39b->pMonsterInfo.uID ) + if( pActors[pSpriteObject->field_58_pid >> 3].pMonsterInfo.uID != v39b->pMonsterInfo.uID ) //not sure: pMonsterList->pMonsters[v39b->word_000086_some_monster_id-1].uToHitRadius _46DF1A_collide_against_actor(v42, *((short *)&pMonsterList->pMonsters[v39b->word_000086_some_monster_id] - 73)); ++v42; @@ -733,17 +733,17 @@ while ( v40 < 100 ); if ( stru_721530.field_7C >= stru_721530.field_6C ) { - v1->vPosition.x = stru_721530.normal2.x; - v1->vPosition.y = stru_721530.normal2.y; - v1->vPosition.z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; - v1->uSectorID = LOWORD(stru_721530.uSectorID); - if ( !(HIBYTE(v2->uFlags) & 1) ) + pSpriteObject->vPosition.x = stru_721530.normal2.x; + pSpriteObject->vPosition.y = stru_721530.normal2.y; + pSpriteObject->vPosition.z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; + pSpriteObject->uSectorID = LOWORD(stru_721530.uSectorID); + if ( !(HIBYTE(pObject->uFlags) & 1) ) return; memset(&Dst, v8, 0x68u); - v29 = v2->uFlags; - Dst.x = (double)v1->vPosition.x; - Dst.y = (double)v1->vPosition.y; - Dst.z = (double)v1->vPosition.z; + v29 = pObject->uFlags; + Dst.x = (double)pSpriteObject->vPosition.x; + Dst.y = (double)pSpriteObject->vPosition.y; + Dst.z = (double)pSpriteObject->vPosition.z; Dst.flt_10 = 0.0; Dst.flt_14 = 0.0; Dst.flt_18 = 0.0; @@ -758,7 +758,15 @@ else { if ( v29 & 0x400 ) - goto LABEL_70; + { + Dst.type = ParticleType_Line; + Dst.uDiffuse = rand(); + Dst.timeToLive = 64; + Dst.uTextureID = v8; + Dst.flt_28 = 1.0; + pGame->pParticleEngine->AddParticle(&Dst); + return; + } Dst.type = ParticleType_Bitmap | ParticleType_8; Dst.uDiffuse = rand(); v30 = rand(); @@ -767,34 +775,35 @@ } Dst.timeToLive = (unsigned __int8)(v30 & 0x80) + 128; Dst.uTextureID = pBitmaps_LOD->LoadTexture(v32, v34); - goto LABEL_71; + Dst.flt_28 = 1.0; + pGame->pParticleEngine->AddParticle(&Dst); + return; } v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16; - v1->vPosition.x += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16; + pSpriteObject->vPosition.x += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16; v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16; - v1->vPosition.y += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16; + pSpriteObject->vPosition.y += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16; v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; - v1->vPosition.z += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; - v1->uSectorID = LOWORD(stru_721530.uSectorID); + pSpriteObject->vPosition.z += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; + pSpriteObject->uSectorID = LOWORD(stru_721530.uSectorID); stru_721530.field_70 += stru_721530.field_7C; - if ( v2->uFlags & 0x40 && !_46BFFA_check_object_intercept(uLayingItemID_, stru_721530.uFaceID) ) + if ( pObject->uFlags & 0x40 && !_46BFFA_check_object_intercept(uLayingItemID, stru_721530.uFaceID) ) return; v15 = (signed int)stru_721530.uFaceID >> 3; if ( (stru_721530.uFaceID & 7) == OBJECT_Decoration) { - v40 = integer_sqrt(v1->vVelocity.x * v1->vVelocity.x + v1->vVelocity.y * v1->vVelocity.y); - v23 = stru_5C6E00->Atan2( - v1->vPosition.x - pLevelDecorations[v15].vPosition.x, - v1->vPosition.y - pLevelDecorations[v15].vPosition.y); + v40 = integer_sqrt(pSpriteObject->vVelocity.x * pSpriteObject->vVelocity.x + pSpriteObject->vVelocity.y * pSpriteObject->vVelocity.y); + v23 = stru_5C6E00->Atan2(pSpriteObject->vPosition.x - pLevelDecorations[v15].vPosition.x, + pSpriteObject->vPosition.y - pLevelDecorations[v15].vPosition.y); v42 = stru_5C6E00->Cos(v23); v41 = (unsigned __int64)(v42 * (signed __int64)v40) >> 16; v24 = v23; - v1->vVelocity.x = (unsigned int)(v42 * v40) >> 16; + pSpriteObject->vVelocity.x = (unsigned int)(v42 * v40) >> 16; v25 = stru_5C6E00->Sin(v23); v42 = v25; v26 = v25 * (signed __int64)v40; v41 = v26 >> 16; - v1->vVelocity.y = WORD1(v26); + pSpriteObject->vVelocity.y = WORD1(v26); } else { @@ -804,8 +813,8 @@ v16 = &pIndoor->pFaces[v15]; if ( v16->uPolygonType != 3 ) { - v42 = abs(v16->pFacePlane_old.vNormal.x * v1->vVelocity.x + v16->pFacePlane_old.vNormal.z * v1->vVelocity.z - + v16->pFacePlane_old.vNormal.y * v1->vVelocity.y) >> 16; + v42 = abs(v16->pFacePlane_old.vNormal.x * pSpriteObject->vVelocity.x + v16->pFacePlane_old.vNormal.z * pSpriteObject->vVelocity.z + + v16->pFacePlane_old.vNormal.y * pSpriteObject->vVelocity.y) >> 16; if ( stru_721530.field_64 >> 3 > v42 ) v42 = stru_721530.field_64 >> 3; v40 = v16->pFacePlane_old.vNormal.x; @@ -814,8 +823,8 @@ v41 = (unsigned __int64)(v42 * (signed __int64)v41) >> 16; v39 = v16->pFacePlane_old.vNormal.z; v39 = (unsigned __int64)(v42 * (signed __int64)v39) >> 16; - v1->vVelocity.x += 2 * v40; - v1->vVelocity.y += 2 * v41; + pSpriteObject->vVelocity.x += 2 * v40; + pSpriteObject->vVelocity.y += 2 * v41; if ( v16->pFacePlane_old.vNormal.z <= 32000 ) { v22 = 2 * v39; @@ -824,102 +833,107 @@ { v21 = v39; v40 = 32000; - v1->vVelocity.z += v39; + pSpriteObject->vVelocity.z += v39; v41 = (unsigned __int64)(v40 * (signed __int64)v21) >> 16; v22 = (unsigned int)(v40 * v21) >> 16; } - v1->vVelocity.z += v22; - goto LABEL_60; + pSpriteObject->vVelocity.z += v22; + if ( BYTE3(v16->uAttributes) & 0x10 ) + EventProcessor(pIndoor->pFaceExtras[v16->uFaceExtraID].uEventID, 0, 1); + goto LABEL_63; } - if ( v37->uFlags & 0x80 ) + if ( pObject->uFlags & 0x80 ) { - v17 = -v1->vVelocity.z >> 1; - v1->vVelocity.z = v17; + v17 = -pSpriteObject->vVelocity.z >> 1; + pSpriteObject->vVelocity.z = v17; if ( (signed __int16)v17 < 10 ) - v1->vVelocity.z = 0; -LABEL_60: + pSpriteObject->vVelocity.z = 0; if ( BYTE3(v16->uAttributes) & 0x10 ) EventProcessor(pIndoor->pFaceExtras[v16->uFaceExtraID].uEventID, 0, 1); goto LABEL_63; } - v18 = v1->vVelocity.y; - v19 = v1->vVelocity.x; - v1->vVelocity.z = 0; + v18 = pSpriteObject->vVelocity.y; + v19 = pSpriteObject->vVelocity.x; + pSpriteObject->vVelocity.z = 0; if ( v19 * v19 + v18 * v18 >= 400 ) - goto LABEL_60; + { + if ( BYTE3(v16->uAttributes) & 0x10 ) + EventProcessor(pIndoor->pFaceExtras[v16->uFaceExtraID].uEventID, 0, 1); + goto LABEL_63; + } v20 = pIndoor->pVertices; - v1->vVelocity.z = 0; - v1->vVelocity.y = 0; - v1->vVelocity.x = 0; - v1->vPosition.z = v20[*v16->pVertexIDs].z + 1; + pSpriteObject->vVelocity.z = 0; + pSpriteObject->vVelocity.y = 0; + pSpriteObject->vVelocity.x = 0; + pSpriteObject->vPosition.z = v20[*v16->pVertexIDs].z + 1; } LABEL_63: - v2 = v37; + //v2 = v37; LABEL_64: - v41 = v1->vVelocity.x; + v41 = pSpriteObject->vVelocity.x; v40 = 58500; v41 = (unsigned __int64)(58500i64 * v41) >> 16; - v1->vVelocity.x = v41; - v41 = v1->vVelocity.y; + pSpriteObject->vVelocity.x = v41; + v41 = pSpriteObject->vVelocity.y; v41 = (unsigned __int64)(v40 * (signed __int64)v41) >> 16; v40 = 58500; - v1->vVelocity.y = v41; - v41 = v1->vVelocity.z; + pSpriteObject->vVelocity.y = v41; + v41 = pSpriteObject->vVelocity.z; v41 = (unsigned __int64)(v40 * (signed __int64)v41) >> 16; ++uFaceID; v28 = __OFSUB__(uFaceID, 100); v27 = uFaceID - 100 < 0; - v1->vVelocity.z = v41; + pSpriteObject->vVelocity.z = v41; if ( !(v27 ^ v28) ) return; v8 = 0; } } - if ( v42 <= v1->vPosition.z - 3 ) + if ( v42 <= pSpriteObject->vPosition.z - 3 ) { - v1->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); + pSpriteObject->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); goto LABEL_24; } - if ( !(v5 & 0x40) || _46BFFA_check_object_intercept(uLayingItemID_, 0) ) + if ( !(v5 & 0x40) || _46BFFA_check_object_intercept(uLayingItemID, 0) ) { v6 = pIndoor->pFaces; - v1->vPosition.z = v42 + 1; + pSpriteObject->vPosition.z = v42 + 1; v7 = &v6[uFaceID]; if ( v7->uPolygonType == 3 ) { v8 = 0; - v1->vVelocity.z = 0; + pSpriteObject->vVelocity.z = 0; } else { if ( v7->pFacePlane_old.vNormal.z < 45000 ) - v1->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); + pSpriteObject->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); v8 = 0; } - v42 = v1->vVelocity.x; + v42 = pSpriteObject->vVelocity.x; uFaceID = 58500; v42 = (unsigned __int64)(58500i64 * v42) >> 16; - v1->vVelocity.x = v42; - v42 = v1->vVelocity.y; + pSpriteObject->vVelocity.x = v42; + v42 = pSpriteObject->vVelocity.y; v42 = (unsigned __int64)(uFaceID * (signed __int64)v42) >> 16; uFaceID = 58500; - v1->vVelocity.y = v42; - v42 = v1->vVelocity.z; + pSpriteObject->vVelocity.y = v42; + v42 = pSpriteObject->vVelocity.z; v42 = (unsigned __int64)(uFaceID * (signed __int64)v42) >> 16; - v9 = v1->vVelocity.x; - v1->vVelocity.z = v42; - if ( v9 * v9 + v1->vVelocity.y * v1->vVelocity.y < 400 ) + v9 = pSpriteObject->vVelocity.x; + pSpriteObject->vVelocity.z = v42; + if ( v9 * v9 + pSpriteObject->vVelocity.y * pSpriteObject->vVelocity.y < 400 ) { - v1->vVelocity.z = v8; - v1->vVelocity.y = v8; - v1->vVelocity.x = v8; - if ( !(HIBYTE(v2->uFlags) & 1) ) + pSpriteObject->vVelocity.z = v8; + pSpriteObject->vVelocity.y = v8; + pSpriteObject->vVelocity.x = v8; + if ( !(pObject->uFlags & 1) ) return; memset(&Dst, v8, 0x68u); - v10 = v2->uFlags; - Dst.x = (double)v1->vPosition.x; - Dst.y = (double)v1->vPosition.y; - Dst.z = (double)v1->vPosition.z; + v10 = pObject->uFlags; + Dst.x = (double)pSpriteObject->vPosition.x; + Dst.y = (double)pSpriteObject->vPosition.y; + Dst.z = (double)pSpriteObject->vPosition.z; Dst.flt_10 = 0.0; Dst.flt_14 = 0.0; Dst.flt_18 = 0.0; @@ -936,14 +950,13 @@ { if ( v10 & 0x400 ) { -LABEL_70: Dst.type = ParticleType_Line; Dst.uDiffuse = rand(); Dst.timeToLive = 64; Dst.uTextureID = v8; -LABEL_71: Dst.flt_28 = 1.0; - goto LABEL_72; + pGame->pParticleEngine->AddParticle(&Dst); + return; } Dst.type = ParticleType_Bitmap | ParticleType_8; Dst.uDiffuse = rand(); @@ -954,7 +967,6 @@ } Dst.timeToLive = (unsigned __int8)(v11 & 0x80) + 128; Dst.uTextureID = pBitmaps_LOD->LoadTexture(v31, v33); -LABEL_72: pGame->pParticleEngine->AddParticle(&Dst); return; }
--- a/UIHouses.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/UIHouses.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -3823,7 +3823,7 @@ //----- (004B4710) -------------------------------------------------------- int __cdecl TrainingDialog() { - Player *v0; // ebx@1 + //Player *v0; // ebx@1 int color2; // eax@1 //unsigned int v2; // ecx@1 //int v3; // eax@1 @@ -3898,7 +3898,7 @@ int v72; // [sp+7Ch] [bp-8h]@16 int v73; // [sp+80h] [bp-4h]@14 - v0 = pPlayers[uActiveCharacter]; + //v0 = pPlayers[uActiveCharacter]; memcpy(&v65, window_SpeakInHouse, sizeof(v65)); v65.uFrameX = 483; v65.uFrameWidth = 148; @@ -3912,22 +3912,22 @@ //for ( i = v2; v4 < (signed int)v2; ++v4 ) // v3 += v4 + 1; //v5 = 1000 * v3; - v5 = 1000ui64 * v0->uLevel * (v0->uLevel + 1) / 2; // E n = n(n + 1) / 2 + v5 = 1000ui64 * pPlayers[uActiveCharacter]->uLevel * (pPlayers[uActiveCharacter]->uLevel + 1) / 2; // E n = n(n + 1) / 2 //v6 = HIDWORD(v0->uExperience); //v7 = window_SpeakInHouse->ptr_1C; v68 = pMaxLevelPerTrainingHallType[(unsigned int)window_SpeakInHouse->ptr_1C - 89]; //v66 = 1000 * v3; - if (v0->uExperience >= v5) + if (pPlayers[uActiveCharacter]->uExperience >= v5) { - v8 = v0->classType % 4 + 1; + v8 = pPlayers[uActiveCharacter]->classType % 4 + 1; if ( v8 == 4 ) v8 = 3; - v9 = (double)v0->uLevel; + v9 = (double)pPlayers[uActiveCharacter]->uLevel; //i = 0; v69 = v8; //v10 = (signed __int64)(v9 * p2DEvents_minus1__20[13 * (signed int)v7] * (double)v8); v10 = (signed __int64)(v9 * p2DEvents[(signed int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier * (double)v8); - v11 = v10 * (100 - v0->GetMerchant()) / 100; + v11 = v10 * (100 - pPlayers[uActiveCharacter]->GetMerchant()) / 100; if ( v11 < v10 / 3 ) v11 = v10 / 3; //i = v11; @@ -3950,7 +3950,7 @@ v13 = pDialogueWindow; //v14 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0); v14 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0); - v73 = v14 * (100 - v0->GetMerchant()) / 100; + v73 = v14 * (100 - pPlayers[uActiveCharacter]->GetMerchant()) / 100; if ( v73 < v14 / 3 ) v73 = v14 / 3; v15 = v13->pStartingPosActiveItem; @@ -3961,7 +3961,7 @@ do { v17 = v13->GetControl(v15)->uControlParam - 36; - if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v17] && !v0->pActiveSkills[v17] ) + if ( byte_4ED970_skill_learn_ability_by_class_table[pPlayers[uActiveCharacter]->classType][v17] && !pPlayers[uActiveCharacter]->pActiveSkills[v17] ) { v18 = pFontArrus->CalcTextHeight(pSkillNames[v17], &v65, 0, 0); _v0 += v18; @@ -3989,7 +3989,7 @@ v20 = v13->GetControl(_v1); v21 = v20; v22 = v20->uControlParam - 36; - if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v22] || v0->pActiveSkills[v22] ) + if ( !byte_4ED970_skill_learn_ability_by_class_table[pPlayers[uActiveCharacter]->classType][v22] || pPlayers[uActiveCharacter]->pActiveSkills[v22] ) { v21->uW = 0; v21->uHeight = 0; @@ -4022,7 +4022,7 @@ else { LABEL_76: - sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]);// + sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], pPlayers[uActiveCharacter]->pName, pClassNames[pPlayers[uActiveCharacter]->classType]);// // "Seek knowledge elsewhere %s the %s" strcat(pTmpBuf, "\n \n"); strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);// "I can offer you nothing further." @@ -4039,24 +4039,24 @@ v31 = pNPCTopics[122].pText; v32 = color2; v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0); - v65.DrawTitleText(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u); + v65.DrawTitleText(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3); result = (int)pDialogueWindow; pDialogueWindow->pNumPresenceButton = 0; return result; } - v34 = v0->uLevel; + v34 = pPlayers[uActiveCharacter]->uLevel; if ( v34 < v68 ) { - if ( (signed __int64)v0->uExperience >= v5 ) + if ( (signed __int64)pPlayers[uActiveCharacter]->uExperience >= v5 ) { if ( pParty->uNumGold >= v11) { Party::TakeGold(v11); HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2); - ++v0->uLevel; - v0->uSkillPoints += v0->uLevel / 10 + 5; - v0->sHealth = v0->GetMaxHealth(); - v0->sMana = v0->GetMaxMana(); + ++pPlayers[uActiveCharacter]->uLevel; + pPlayers[uActiveCharacter]->uSkillPoints += pPlayers[uActiveCharacter]->uLevel / 10 + 5; + pPlayers[uActiveCharacter]->sHealth = pPlayers[uActiveCharacter]->GetMaxHealth(); + pPlayers[uActiveCharacter]->sMana = pPlayers[uActiveCharacter]->GetMaxMana(); v37 = 0; v38 = byte_F8B148; do @@ -4079,17 +4079,18 @@ if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) pOutdoor->SetFog(); } - v0->PlaySound(SPEECH_87, 0); - sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[430], v0->pName, v0->uLevel, v0->uLevel / 10 + 5);// + pPlayers[uActiveCharacter]->PlaySound(SPEECH_87, 0); + sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[430], pPlayers[uActiveCharacter]->pName, pPlayers[uActiveCharacter]->uLevel, pPlayers[uActiveCharacter]->uLevel / 10 + 5);// // "%s is now Level %lu and has earned %lu Skill Points!" - ShowStatusBarString(pTmpBuf, 2u); - goto LABEL_56; + ShowStatusBarString(pTmpBuf, 2); + pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); + return true; } - ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold" + ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2);// "You don't have enough gold" v63 = 4; LABEL_55: HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, v63); -LABEL_56: +//LABEL_56: /*result = pMessageQueue_50CBD0->uNumMessages; if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 ) { @@ -4103,7 +4104,7 @@ pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); return 1; // void function actually } - sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[538], (unsigned int)(v5 - v0->uExperience), v34 + 1);// + sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[538], (unsigned int)(v5 - pPlayers[uActiveCharacter]->uExperience), v34 + 1);// // "You need %d more experience to train to level %d" v35 = 0; v62 = 3; @@ -4142,13 +4143,13 @@ { if ( v43->GetControl(v73)->uControlParam == 17 ) { - v46 = v0->uLevel; + v46 = pPlayers[uActiveCharacter]->uLevel; if ( v46 < v68 ) { - if ( (signed __int64)v0->uExperience < v5 ) + if ( (signed __int64)pPlayers[uActiveCharacter]->uExperience < v5 ) { v64 = (char *)(v46 + 1); - v61 = (char *)(v5 - LODWORD(v0->uExperience)); + v61 = (char *)(v5 - LODWORD(pPlayers[uActiveCharacter]->uExperience)); v59 = pGlobalTXT_LocalizationStrings[538];// "You need %d more experience to train to level %d" } else @@ -4180,7 +4181,7 @@ v49 = (2 * (87 - (174 - v72) / 2) - v72) / 2 - (174 - v72) / 2 / 2 + 138; v50 = -v43->pNumPresenceButton < 0; v73 = v43->pStartingPosActiveItem; - if ( v50 ^ __OFSUB__(result, v48) ) + if ( v50 ^ result < v48 ) { int _v3 = 2; v51 = pShopOptions;
--- a/mm7_3.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/mm7_3.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -56,18 +56,18 @@ //----- (0046E44E) -------------------------------------------------------- int __thiscall _46E44E_collide_against_faces_and_portals(unsigned int b1) { - BLVSector *v1; // edi@1 + BLVSector *pSector; // edi@1 signed int v2; // ebx@1 - BLVFace *v3; // esi@2 - __int16 v4; // si@10 - int v5; // ecx@12 + BLVFace *pFace; // esi@2 + __int16 pNextSector; // si@10 + int pArrayNum; // ecx@12 unsigned __int8 v6; // sf@12 unsigned __int8 v7; // of@12 int result; // eax@14 - BLVSector *v9; // ebx@15 + //BLVSector *v9; // ebx@15 int v10; // ecx@15 - int v11; // eax@16 - BLVFace *v12; // ebp@16 + int pFloor; // eax@16 + //BLVFace *v12; // ebp@16 int v13; // eax@24 int v14; // esi@24 int v15; // eax@24 @@ -88,31 +88,31 @@ int v30; // [sp+24h] [bp-34h]@35 int v31; // [sp+28h] [bp-30h]@24 int v32; // [sp+2Ch] [bp-2Ch]@15 - int v33[10]; // [sp+30h] [bp-28h]@1 - - v1 = &pIndoor->pSectors[stru_721530.uSectorID]; + int pSectorsArray[10]; // [sp+30h] [bp-28h]@1 + + pSector = &pIndoor->pSectors[stru_721530.uSectorID]; v2 = 0; a10 = b1; - v33[0] = stru_721530.uSectorID; - for ( i = 1; v2 < v1->uNumPortals; ++v2 ) - { - v3 = &pIndoor->pFaces[v1->pPortals[v2]]; - if ( stru_721530.sMaxX <= v3->pBounding.x2 - && stru_721530.sMinX >= v3->pBounding.x1 - && stru_721530.sMaxY <= v3->pBounding.y2 - && stru_721530.sMinY >= v3->pBounding.y1 - && stru_721530.sMaxZ <= v3->pBounding.z2 - && stru_721530.sMinZ >= v3->pBounding.z1 - && abs((v3->pFacePlane_old.dist - + stru_721530.normal.x * v3->pFacePlane_old.vNormal.x - + stru_721530.normal.y * v3->pFacePlane_old.vNormal.y - + stru_721530.normal.z * v3->pFacePlane_old.vNormal.z) >> 16) <= stru_721530.field_6C + 16 ) - { - v4 = v3->uSectorID == stru_721530.uSectorID ? v3->uBackSectorID : v3->uSectorID; - v5 = i++; - v7 = __OFSUB__(i, 10); + pSectorsArray[0] = stru_721530.uSectorID; + for ( i = 1; v2 < pSector->uNumPortals; ++v2 ) + { + pFace = &pIndoor->pFaces[pSector->pPortals[v2]]; + if ( stru_721530.sMaxX <= pFace->pBounding.x2 + && stru_721530.sMinX >= pFace->pBounding.x1 + && stru_721530.sMaxY <= pFace->pBounding.y2 + && stru_721530.sMinY >= pFace->pBounding.y1 + && stru_721530.sMaxZ <= pFace->pBounding.z2 + && stru_721530.sMinZ >= pFace->pBounding.z1 + && abs((pFace->pFacePlane_old.dist + + stru_721530.normal.x * pFace->pFacePlane_old.vNormal.x + + stru_721530.normal.y * pFace->pFacePlane_old.vNormal.y + + stru_721530.normal.z * pFace->pFacePlane_old.vNormal.z) >> 16) <= stru_721530.field_6C + 16 ) + { + pNextSector = pFace->uSectorID == stru_721530.uSectorID ? pFace->uBackSectorID : pFace->uSectorID;//FrontSectorID + pArrayNum = i++; + v7 = i < 10; v6 = i - 10 < 0; - v33[v5] = v4; + pSectorsArray[pArrayNum] = pNextSector; if ( !(v6 ^ v7) ) break; } @@ -123,9 +123,9 @@ { while ( 1 ) { - v9 = &pIndoor->pSectors[v33[result]]; + pSector = &pIndoor->pSectors[pSectorsArray[result]]; v10 = 0; - v32 = v9->uNumFloors + v9->uNumWalls + v9->uNumCeilings; + v32 = pSector->uNumFloors + pSector->uNumWalls + pSector->uNumCeilings; v26 = 0; if ( v32 > 0 ) break; @@ -136,53 +136,40 @@ } while ( 1 ) { - v11 = v9->pFloors[v10]; - v12 = &pIndoor->pFaces[v11]; - if ( v12->Portal() - || stru_721530.sMaxX > v12->pBounding.x2 - || stru_721530.sMinX < v12->pBounding.x1 - || stru_721530.sMaxY > v12->pBounding.y2 - || stru_721530.sMinY < v12->pBounding.y1 - || stru_721530.sMaxZ > v12->pBounding.z2 - || stru_721530.sMinZ < v12->pBounding.z1 - || v11 == stru_721530.field_84 ) + pFloor = pSector->pFloors[v10]; + pFace = &pIndoor->pFaces[pFloor]; + if ( pFace->Portal() + || stru_721530.sMaxX > pFace->pBounding.x2 + || stru_721530.sMinX < pFace->pBounding.x1 + || stru_721530.sMaxY > pFace->pBounding.y2 + || stru_721530.sMinY < pFace->pBounding.y1 + || stru_721530.sMaxZ > pFace->pBounding.z2 + || stru_721530.sMinZ < pFace->pBounding.z1 + || pFloor == stru_721530.field_84 ) goto LABEL_45; - v13 = v12->pFacePlane_old.vNormal.y; - v14 = v12->pFacePlane_old.dist; + v13 = pFace->pFacePlane_old.vNormal.y; + v14 = pFace->pFacePlane_old.dist; v31 = v13; - v15 = (stru_721530.normal.x * v12->pFacePlane_old.vNormal.x - + v14 - + stru_721530.normal.y * v13 - + stru_721530.normal.z * v12->pFacePlane_old.vNormal.z) >> 16; + v15 = (stru_721530.normal.x * pFace->pFacePlane_old.vNormal.x + v14 + stru_721530.normal.y * v13 + + stru_721530.normal.z * pFace->pFacePlane_old.vNormal.z) >> 16; if ( v15 > 0 ) { - v16 = (stru_721530.normal2.y * v31 - + v12->pFacePlane_old.dist - + stru_721530.normal2.z * v12->pFacePlane_old.vNormal.z - + stru_721530.normal2.x * v12->pFacePlane_old.vNormal.x) >> 16; + v16 = (stru_721530.normal2.y * v31 + pFace->pFacePlane_old.dist + stru_721530.normal2.z * pFace->pFacePlane_old.vNormal.z + + stru_721530.normal2.x * pFace->pFacePlane_old.vNormal.x) >> 16; if ( v15 <= stru_721530.prolly_normal_d || v16 <= stru_721530.prolly_normal_d ) { if ( v16 <= v15 ) { a3 = stru_721530.field_6C; - if ( sub_47531C( - stru_721530.prolly_normal_d, - &a3, - stru_721530.normal.x, - stru_721530.normal.y, - stru_721530.normal.z, - stru_721530.field_58.x, - stru_721530.field_58.y, - stru_721530.field_58.z, - v12, - a10) ) + if ( sub_47531C(stru_721530.prolly_normal_d, &a3, stru_721530.normal.x, stru_721530.normal.y, stru_721530.normal.z, + stru_721530.field_58.x, stru_721530.field_58.y, stru_721530.field_58.z, pFace, a10) ) { v17 = a3; } else { a3 = stru_721530.field_6C + stru_721530.prolly_normal_d; - if ( !sub_475D85(&stru_721530.normal, &stru_721530.field_58, &a3, v12) ) + if ( !sub_475D85(&stru_721530.normal, &stru_721530.field_58, &a3, pFace) ) goto LABEL_34; v17 = a3 - stru_721530.prolly_normal_d; a3 -= stru_721530.prolly_normal_d; @@ -190,7 +177,7 @@ if ( v17 < stru_721530.field_7C ) { stru_721530.field_7C = v17; - v18 = 8 * v9->pFloors[v26]; + v18 = 8 * pSector->pFloors[v26]; LOBYTE(v18) = v18 | 6; stru_721530.uFaceID = v18; } @@ -199,40 +186,27 @@ } LABEL_34: if ( !(stru_721530.field_0 & 1) - || (v19 = v12->pFacePlane_old.vNormal.x, - v20 = v12->pFacePlane_old.vNormal.y, + || (v19 = pFace->pFacePlane_old.vNormal.x, + v20 = pFace->pFacePlane_old.vNormal.y, v30 = v19, - v21 = (stru_721530.field_34.x * v19 - + v12->pFacePlane_old.dist - + stru_721530.field_34.y * v20 - + stru_721530.field_34.z * v12->pFacePlane_old.vNormal.z) >> 16, + v21 = (stru_721530.field_34.x * v19 + pFace->pFacePlane_old.dist + stru_721530.field_34.y * v20 + + stru_721530.field_34.z * pFace->pFacePlane_old.vNormal.z) >> 16, v21 <= 0) - || (v22 = (stru_721530.field_4C * v30 - + v12->pFacePlane_old.dist - + stru_721530.field_50 * v20 - + stru_721530.field_54 * v12->pFacePlane_old.vNormal.z) >> 16, + || (v22 = (stru_721530.field_4C * v30 + pFace->pFacePlane_old.dist + stru_721530.field_50 * v20 + + stru_721530.field_54 * pFace->pFacePlane_old.vNormal.z) >> 16, v21 > stru_721530.prolly_normal_d) && v22 > stru_721530.prolly_normal_d || v22 > v21 ) goto LABEL_45; a3 = stru_721530.field_6C; - if ( sub_47531C( - stru_721530.field_8, - &a3, - stru_721530.field_34.x, - stru_721530.field_34.y, - stru_721530.field_34.z, - stru_721530.field_58.x, - stru_721530.field_58.y, - stru_721530.field_58.z, - v12, - a10) ) + if ( sub_47531C(stru_721530.field_8, &a3, stru_721530.field_34.x, stru_721530.field_34.y, stru_721530.field_34.z, + stru_721530.field_58.x, stru_721530.field_58.y, stru_721530.field_58.z, pFace, a10) ) { v23 = a3; goto LABEL_43; } a3 = stru_721530.field_6C + stru_721530.field_8; - if ( sub_475D85(&stru_721530.field_34, &stru_721530.field_58, &a3, v12) ) + if ( sub_475D85(&stru_721530.field_34, &stru_721530.field_58, &a3, pFace) ) { v23 = a3 - stru_721530.prolly_normal_d; a3 -= stru_721530.prolly_normal_d; @@ -240,7 +214,7 @@ if ( v23 < stru_721530.field_7C ) { stru_721530.field_7C = v23; - v24 = 8 * v9->pFloors[v26]; + v24 = 8 * pSector->pFloors[v26]; LOBYTE(v24) = v24 | 6; stru_721530.uFaceID = v24; } @@ -1631,15 +1605,15 @@ int new_party_y; // [sp+48h] [bp-18h]@1 int new_party_x; // [sp+4Ch] [bp-14h]@1 int party_z; // [sp+50h] [bp-10h]@1 - int v89; // [sp+58h] [bp-8h]@1 + //int v89; // [sp+58h] [bp-8h]@1 int angle; // [sp+5Ch] [bp-4h]@47 uFaceEvent = 0; - v89 = pParty->uFallSpeed; + //v89 = pParty->uFallSpeed; v1 = 0; - new_party_y = pParty->vPosition.y; v2 = 0; new_party_x = pParty->vPosition.x; + new_party_y = pParty->vPosition.y; party_z = pParty->vPosition.z; uSectorID = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z); v72 = 0; @@ -1730,7 +1704,6 @@ pParty->field_6F8 -= pEventTimer->uTimeElapsed; if ( party_z > v80 + 1 ) { -LABEL_43: if ( bJumping ) goto LABEL_45; goto LABEL_44; @@ -1745,7 +1718,9 @@ if (pFace->uAttributes & 0x04000000 ) { uFaceEvent = pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID; - goto LABEL_43; + if ( bJumping ) + goto LABEL_45; + goto LABEL_44; } } LABEL_44: @@ -1770,13 +1745,22 @@ if ( uTurnSpeed ) goto LABEL_58; v13 = (double)v82 * fTurnSpeedMultiplier; - goto LABEL_51; + v14 = angle + (unsigned __int64)(signed __int64)v13; + angle = stru_5C6E00->uDoublePiMask & v14; + goto LABEL_87; case PARTY_TurnRight: LODWORD(v15) = uTurnSpeed; if ( uTurnSpeed ) - goto LABEL_56; + { + angle = stru_5C6E00->uDoublePiMask & (angle - v15); + goto LABEL_87; + } v16 = (double)v82 * fTurnSpeedMultiplier; - goto LABEL_55; + //{ + v15 = (signed __int64)v16; + angle = stru_5C6E00->uDoublePiMask & (angle - v15); + goto LABEL_87; + //} case PARTY_FastTurnLeft: v12 = uTurnSpeed; if ( uTurnSpeed ) @@ -1787,7 +1771,6 @@ else { v13 = (fTurnSpeedMultiplier + fTurnSpeedMultiplier) * (double)v82; -LABEL_51: v14 = angle + (unsigned __int64)(signed __int64)v13; } angle = stru_5C6E00->uDoublePiMask & v14; @@ -1797,13 +1780,11 @@ if ( !uTurnSpeed ) { v16 = (fTurnSpeedMultiplier + fTurnSpeedMultiplier) * (double)v82; -LABEL_55: v15 = (signed __int64)v16; } -LABEL_56: angle = stru_5C6E00->uDoublePiMask & (angle - v15); goto LABEL_87; - case PARTY_StrafeLeft: + case PARTY_StrafeLeft://Ctrl + <- __debugbreak(); v17 = stru_5C6E00->Sin(angle); v18 = (double)v81; @@ -1812,7 +1793,9 @@ v2 -= v78; v19 = stru_5C6E00->Cos(angle); v78 = (unsigned __int64)(v19 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16; - goto LABEL_63; + v1 += v78; + v78 = 1; + goto LABEL_87; case PARTY_StrafeRight: __debugbreak(); v20 = stru_5C6E00->Sin(angle); @@ -1822,7 +1805,10 @@ v2 += v78; v22 = stru_5C6E00->Cos(angle); v78 = (unsigned __int64)(v22 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16; - goto LABEL_68; + //goto LABEL_68; + v1 -= v78; + v78 = 1; + goto LABEL_87; case PARTY_WalkForward: __debugbreak(); v23 = stru_5C6E00->Cos(angle); @@ -1832,9 +1818,9 @@ v2 += v78; v25 = stru_5C6E00->Sin(angle); v78 = (unsigned __int64)(v25 * (signed __int64)(signed int)(signed __int64)(v24 * fWalkSpeedMultiplier)) >> 16; -LABEL_63: v1 += v78; - goto LABEL_64; + v78 = 1; + goto LABEL_87; case PARTY_WalkBackward: __debugbreak(); v26 = stru_5C6E00->Cos(angle); @@ -1844,9 +1830,7 @@ v2 -= v78; v28 = stru_5C6E00->Sin(angle); v78 = (unsigned __int64)(v28 * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16; -LABEL_68: v1 -= v78; -LABEL_64: v78 = 1; goto LABEL_87; case PARTY_RunForward: @@ -1865,7 +1849,6 @@ v2 -= (unsigned __int64)(stru_5C6E00->Cos(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; //v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); v1 -= (unsigned __int64)(stru_5C6E00->Sin(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; -//LABEL_70: v72 = 1; goto LABEL_87; case PARTY_LookUp: @@ -1875,30 +1858,24 @@ v35 = uActiveCharacter; if ( !uActiveCharacter ) goto LABEL_87; - v65 = 0; - v63 = SPEECH_63; - goto LABEL_76; + pPlayers[v35]->PlaySound((PlayerSpeech)SPEECH_63, 0); + break; case PARTY_LookDown: _view_angle += (signed __int64)(flt_6BE150_look_up_down_dangle * -25.0); if ( _view_angle < -128 ) _view_angle = -128; v35 = uActiveCharacter; if ( uActiveCharacter ) - { - v65 = 0; - v63 = SPEECH_64; -LABEL_76: - pPlayers[v35]->PlaySound((PlayerSpeech)v63, v65); - } + pPlayers[v35]->PlaySound((PlayerSpeech)SPEECH_64, 0); break; case PARTY_CenterView: _view_angle = 0; break; case PARTY_Jump: - if ( (!bJumping || party_z <= v80 + 6 && v89 <= 0) && pParty->field_24 ) + if ( (!bJumping || party_z <= v80 + 6 && pParty->uFallSpeed <= 0) && pParty->field_24 ) { bJumping = 1; - v89 = (signed __int64)((double)(pParty->field_24 << 6) * 1.5 + (double)v89); + pParty->uFallSpeed = (signed __int64)((double)(pParty->field_24 << 6) * 1.5 + (double)pParty->uFallSpeed); } break; default: @@ -1910,22 +1887,22 @@ pParty->sRotationX = _view_angle; if ( bJumping ) { - v89 += -2 * pEventTimer->uTimeElapsed * GetGravityStrength(); + pParty->uFallSpeed += -2 * pEventTimer->uTimeElapsed * GetGravityStrength(); } else { if ( pIndoor->pFaces[v68].pFacePlane_old.vNormal.z < 32768 ) { - v89 -= pEventTimer->uTimeElapsed * GetGravityStrength(); + pParty->uFallSpeed -= pEventTimer->uTimeElapsed * GetGravityStrength(); goto LABEL_92; } if (pParty->uFlags & PARTY_FLAGS_1_LANDING) goto LABEL_92; - v89 = 0; - } - if ( bJumping != v36 && v89 <= v36 ) - { - if ( v89 < -500 && !pParty->bFlying ) + pParty->uFallSpeed = 0; + } + if ( bJumping != v36 && pParty->uFallSpeed <= v36 ) + { + if ( pParty->uFallSpeed < -500 && !pParty->bFlying ) { v41 = &pPlayers[1]; do @@ -1964,7 +1941,7 @@ stru_721530.field_20 = v1; stru_721530.normal.z = stru_721530.prolly_normal_d + party_z + 1; stru_721530.field_34.z = stru_721530.field_C + party_z + 1; - stru_721530.field_24 = v89; + stru_721530.field_24 = pParty->uFallSpeed; stru_721530.uSectorID = uSectorID; v38 = 0; if ( pParty->bTurnBasedModeOn == 1 && pTurnEngine->field_4 == 3 ) @@ -2023,8 +2000,7 @@ { v53 = integer_sqrt(v2 * v2 + v1 * v1); v80 = v53; - v54 = stru_5C6E00->Atan2( - new_party_x - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.x, + v54 = stru_5C6E00->Atan2(new_party_x - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.x, new_party_y - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.y); v2 = (unsigned __int64)(stru_5C6E00->Cos(v54) * (signed __int64)v53) >> 16; v55 = stru_5C6E00->Sin(v54); @@ -2038,8 +2014,8 @@ v45 = v44->uPolygonType; if ( v45 == 3 ) { - if ( v89 < 0 ) - v89 = 0; + if ( pParty->uFallSpeed < 0 ) + pParty->uFallSpeed = 0; v87 = pIndoor->pVertices[*v44->pVertexIDs].z + 1; if ( pParty->uFallStartY - v87 < 512 ) pParty->uFallStartY = v87; @@ -2048,9 +2024,11 @@ v1 = 0; v2 = 0; } - goto LABEL_143; - } - v46 = v89 * v44->pFacePlane_old.vNormal.z; + if ( pParty->field_6F4_packedid != v43 >> 3 && BYTE3(v44->uAttributes) & 4 ) + uFaceEvent = pIndoor->pFaceExtras[v44->uFaceExtraID].uEventID; + goto LABEL_152; + } + v46 = pParty->uFallSpeed * v44->pFacePlane_old.vNormal.z; v47 = v45 == 4; v48 = v44->pFacePlane_old.vNormal.x; if ( !v47 ) @@ -2064,7 +2042,7 @@ v82 = v44->pFacePlane_old.vNormal.z; v82 = (unsigned __int64)(v80 * (signed __int64)v82) >> 16; v2 += v50; - v89 += v82; + pParty->uFallSpeed += v82; v74 = v44->pFacePlane_old.vNormal.z; v51 = v44->pFacePlane_old.vNormal.y; v69 = v44->pFacePlane_old.vNormal.x; @@ -2077,9 +2055,7 @@ new_party_y += v52 * v80 >> 16; v87 += v52 * v74 >> 16; } -LABEL_142: v43 = stru_721530.uFaceID; -LABEL_143: if ( pParty->field_6F4_packedid != v43 >> 3 && BYTE3(v44->uAttributes) & 4 ) uFaceEvent = pIndoor->pFaceExtras[v44->uFaceExtraID].uEventID; goto LABEL_152; @@ -2094,19 +2070,24 @@ v82 = (unsigned __int64)(v80 * (signed __int64)v82) >> 16; v2 += v49; v1 += v81; - v89 += v82; + pParty->uFallSpeed += v82; if ( v2 * v2 + v1 * v1 >= 400 ) - goto LABEL_142; + { + v43 = stru_721530.uFaceID; + if ( pParty->field_6F4_packedid != v43 >> 3 && BYTE3(v44->uAttributes) & 4 ) + uFaceEvent = pIndoor->pFaceExtras[v44->uFaceExtraID].uEventID; + goto LABEL_152; + } v2 = 0; v1 = 0; - v89 = 0; + pParty->uFallSpeed = 0; } } LABEL_152: v2 = (unsigned __int64)(58500i64 * v2) >> 16; v1 = (unsigned __int64)(58500i64 * v1) >> 16; ++v83; - v89 = (unsigned __int64)(58500i64 * v89) >> 16; + pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; if ( v83 >= 100 ) { new_party_z = v87; @@ -2116,9 +2097,8 @@ if ( bWalkSound && pParty->field_6F8 <= 0 ) { if ( integer_sqrt((pParty->vPosition.x - new_party_x) * (pParty->vPosition.x - new_party_x) + (pParty->vPosition.y - new_party_y) - * (pParty->vPosition.y - new_party_y) - + (pParty->vPosition.z - new_party_z) - * (pParty->vPosition.z - new_party_z)) <= 16 ) + * (pParty->vPosition.y - new_party_y) + (pParty->vPosition.z - new_party_z) + * (pParty->vPosition.z - new_party_z)) <= 16 ) goto LABEL_188; if ( v72 && (!bJumping || bFeatherFall) ) { @@ -2139,7 +2119,6 @@ goto LABEL_175; } v57 = (SoundID)63; -LABEL_174: v56 = pAudioPlayer; goto LABEL_175; } @@ -2155,7 +2134,8 @@ if ( v71 ) { v57 = (SoundID)102; - goto LABEL_174; + v56 = pAudioPlayer; + goto LABEL_175; } v56 = pAudioPlayer; if ( BYTE2(pIndoor->pFaces[uFaceID].uAttributes) & 0x20 ) @@ -2180,7 +2160,7 @@ pParty->vPosition.x = new_party_x; pParty->vPosition.z = new_party_z; pParty->vPosition.y = new_party_y; - pParty->uFallSpeed = v89; + //pParty->uFallSpeed = v89; if ( !bJumping && BYTE3(pIndoor->pFaces[uFaceID].uAttributes) & 0x40 ) pParty->uFlags |= 0x200; if (uFaceEvent)
--- a/mm7_4.cpp Sat Mar 16 17:42:59 2013 +0600 +++ b/mm7_4.cpp Mon Mar 18 01:50:50 2013 +0600 @@ -272,7 +272,7 @@ signed int v34; // eax@54 signed int v35; // esi@56 int result; // eax@57 - int v37; // edi@61 + int pPartyOpp; // edi@61 int v38; // edx@62 //int v39; // [sp+Ch] [bp-34h]@1 //int v40; // [sp+10h] [bp-30h]@2 @@ -496,7 +496,7 @@ } } - v35 = 1; + //v35 = 1; if ( v55 == 1 ) { *pFaceID = dword_721200[0]; @@ -508,25 +508,29 @@ result = dword_7212C8[0]; if ( v55 > 1 ) { - v37 = z + 5; - while ( 1 ) + pPartyOpp = z + 5; + //while ( 1 ) + for ( v35 = 1; v35 < v55; ++v35 ) { v38 = dword_7212C8[v35]; - if ( result <= v37 ) - break; + if ( result <= pPartyOpp ) + { + if ( v38 >= result || v38 > pPartyOpp ) + continue; + result = dword_7212C8[v35]; + *pFaceID = dword_721200[v35]; + continue; + } if ( v38 < result ) - goto LABEL_67; -LABEL_68: - ++v35; - if ( v35 >= v55 ) - return result; - } - if ( v38 <= result || v38 > v37 ) - goto LABEL_68; -LABEL_67: - result = dword_7212C8[v35]; - *pFaceID = dword_721200[v35]; - goto LABEL_68; + { + result = dword_7212C8[v35]; + *pFaceID = dword_721200[v35]; + } +//LABEL_68: + //++v35; + //if ( v35 >= v55 ) + //return result; + } } return result; }