Mercurial > mm7
changeset 2068:a290d9fbdc95
ODM_GetFloorLevel small fix
author | Ritor1 |
---|---|
date | Tue, 03 Dec 2013 16:35:57 +0600 |
parents | 2e08496c40c2 |
children | 2737276390ff 24033aa2e1f8 61960bd85c6d 52abdea20b9e 7cc14d9d966d |
files | Build/Visual Studio 2010/World of Might and Magic.vcxproj Build/Visual Studio 2010/World of Might and Magic.vcxproj.filters Events.cpp Outdoor.cpp Player.cpp SpriteObject.cpp mm7_data.cpp mm7_data.h |
diffstat | 8 files changed, 161 insertions(+), 156 deletions(-) [+] |
line wrap: on
line diff
--- a/Build/Visual Studio 2010/World of Might and Magic.vcxproj Tue Dec 03 09:22:28 2013 +0600 +++ b/Build/Visual Studio 2010/World of Might and Magic.vcxproj Tue Dec 03 16:35:57 2013 +0600 @@ -186,6 +186,9 @@ <ClCompile Include="..\..\ParticleEngine.cpp" /> <ClCompile Include="..\..\Party.cpp" /> <ClCompile Include="..\..\Player.cpp" /> + <ClCompile Include="..\..\Player_wrap.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + </ClCompile> <ClCompile Include="..\..\Random.cpp" /> <ClCompile Include="..\..\Render.cpp" /> <ClCompile Include="..\..\SaveLoad.cpp" /> @@ -387,6 +390,7 @@ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(Filename)_wrap.cxx</Outputs> </CustomBuild> <None Include="..\..\lib\swig\swigwin-2.0.11\UIControlModule.swig" /> + <None Include="..\..\Player.swig" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets">
--- a/Build/Visual Studio 2010/World of Might and Magic.vcxproj.filters Tue Dec 03 09:22:28 2013 +0600 +++ b/Build/Visual Studio 2010/World of Might and Magic.vcxproj.filters Tue Dec 03 16:35:57 2013 +0600 @@ -335,6 +335,7 @@ <None Include="..\..\lib\swig\swigwin-2.0.11\UIControlModule.swig"> <Filter>lib\swig\swigwin-2.0.11</Filter> </None> + <None Include="..\..\Player.swig" /> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\Actor.cpp" /> @@ -607,6 +608,7 @@ </ClCompile> <ClCompile Include="..\..\Timer.cpp" /> <ClCompile Include="..\..\LuaVM.cpp" /> + <ClCompile Include="..\..\Player_wrap.cxx" /> </ItemGroup> <ItemGroup> <CustomBuild Include="..\..\NewUI\Core\UIControlModule.swig">
--- a/Events.cpp Tue Dec 03 09:22:28 2013 +0600 +++ b/Events.cpp Tue Dec 03 16:35:57 2013 +0600 @@ -433,6 +433,7 @@ { if (!lua->DoFile("out01.lua")) Log::Warning(L"Error opening out01.lua\n"); + Log::Warning(L"being tested that well\n"); return; } if ( !uEventID )
--- a/Outdoor.cpp Tue Dec 03 09:22:28 2013 +0600 +++ b/Outdoor.cpp Tue Dec 03 16:35:57 2013 +0600 @@ -3164,10 +3164,10 @@ int v39; // [sp+20h] [bp-20h]@9 signed int pBModelNum; // [sp+28h] [bp-18h]@1 int pFaceNum; // [sp+2Ch] [bp-14h]@8 - bool v43; // [sp+30h] [bp-10h]@22 - bool v44; // [sp+34h] [bp-Ch]@24 + bool current_vertices_Y; // [sp+30h] [bp-10h]@22 + bool next_vertices_Y; // [sp+34h] [bp-Ch]@24 signed int v46; // [sp+3Ch] [bp-4h]@1 - signed int v48; // [sp+58h] [bp+18h]@22 + signed int number_hits; // [sp+58h] [bp+18h]@22 signed int v49; // [sp+58h] [bp+18h]@43 v46 = 1; @@ -3195,44 +3195,45 @@ for ( uint i = 0; i < pFace->uNumVertices; ++i) { - word_721040[2 * i] = pFace->pXInterceptDisplacements[i] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i]].x; - word_720F70[2 * i] = pFace->pXInterceptDisplacements[i + 1] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i]].y; - word_721040[2 * i + 1] = pFace->pXInterceptDisplacements[i] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i + 1]].x; - word_720F70[2 * i + 1] = pFace->pXInterceptDisplacements[i + 1] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i + 1]].y; + FloorFaceVertCoord_X[2 * i] = pFace->pXInterceptDisplacements[i] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i]].x; + FloorFaceVertCoord_Y[2 * i] = pFace->pXInterceptDisplacements[i] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i]].y; + FloorFaceVertCoord_X[2 * i + 1] = pFace->pXInterceptDisplacements[i + 1] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i + 1]].x; + FloorFaceVertCoord_Y[2 * i + 1] = pFace->pXInterceptDisplacements[i + 1] + pBModel->pVertices.pVertices[pFace->pVertexIDs[i + 1]].y; } - word_721040[2 * pFace->uNumVertices] = word_721040[0]; - word_720F70[2 * pFace->uNumVertices] = word_720F70[0]; - v43 = word_720F70[0] >= Y; - v48 = 0; + FloorFaceVertCoord_X[2 * pFace->uNumVertices] = FloorFaceVertCoord_X[0]; + FloorFaceVertCoord_Y[2 * pFace->uNumVertices] = FloorFaceVertCoord_Y[0]; + + current_vertices_Y = FloorFaceVertCoord_Y[0] >= Y; + number_hits = 0; if ( 2 * pFace->uNumVertices > 0 ) { for ( int i = 0; i < 2 * pFace->uNumVertices; ++i ) { - if ( v48 >= 2 ) + if ( number_hits >= 2 ) break; - v36 = word_720F70[i + 1]; - v44 = word_720F70[i + 1] >= Y; - if ( v43 != v44 ) + v36 = FloorFaceVertCoord_Y[i + 1]; + next_vertices_Y = FloorFaceVertCoord_Y[i + 1] >= Y; + if ( current_vertices_Y != next_vertices_Y )//проверка по Y { - v18 = word_721040[i + 1] >= X ? 0 : 2; - v19 = v18 | (word_721040[i] < X); + v18 = FloorFaceVertCoord_X[i + 1] >= X ? 0 : 2; + v19 = v18 | (FloorFaceVertCoord_X[i] < X); if ( v19 != 3 ) { if ( !v19 ) - ++v48; + ++number_hits; else { - LODWORD(v23) = (Y - word_720F70[i]) << 16; - HIDWORD(v23) = (Y - word_720F70[i]) >> 16; - v22 = ((((word_721040[i + 1] - word_721040[i]) * v23 / (v36 - word_720F70[i])) >> 16) + word_721040[i]); + LODWORD(v23) = (Y - FloorFaceVertCoord_Y[i]) << 16; + HIDWORD(v23) = (Y - FloorFaceVertCoord_Y[i]) >> 16; + v22 = ((((FloorFaceVertCoord_X[i + 1] - FloorFaceVertCoord_X[i]) * v23 / (v36 - FloorFaceVertCoord_Y[i])) >> 16) + FloorFaceVertCoord_X[i]); if ( v22 >= X) - ++v48; + ++number_hits; } } } - v43 = v44; + current_vertices_Y = next_vertices_Y; } - if ( v48 == 1 ) + if ( number_hits == 1 ) { if ( v46 >= 20 ) break;
--- a/Player.cpp Tue Dec 03 09:22:28 2013 +0600 +++ b/Player.cpp Tue Dec 03 16:35:57 2013 +0600 @@ -3675,17 +3675,21 @@ { if ( this->HasItemEquipped((ITEM_EQUIP_TYPE)i) ) { - PLAYER_SKILL_TYPE currentItemSkillType = (PLAYER_SKILL_TYPE)GetNthEquippedIndexItem(i)->GetPlayerSkillType(); - int currentItemSkillLevel = this->GetActualSkillLevel(currentItemSkillType); - if ( currentItemSkillType == PLAYER_SKILL_BOW ) + ItemGen* currItemPtr = GetNthEquippedIndexItem(i); + if ( currItemPtr->GetItemEquipType() == EQUIP_TWO_HANDED || currItemPtr->GetItemEquipType() == EQUIP_SINGLE_HANDED ) { - int multiplier = GetMultiplierForSkillLevel(currentItemSkillLevel, 1, 1, 1, 1); - return multiplier * (currentItemSkillLevel & 0x3F); - } - else if ( currentItemSkillType == PLAYER_SKILL_BLASTER ) - { - int multiplier = GetMultiplierForSkillLevel(currentItemSkillLevel, 1, 2, 3, 5); - return multiplier * (currentItemSkillLevel & 0x3F); + PLAYER_SKILL_TYPE currentItemSkillType = (PLAYER_SKILL_TYPE)GetNthEquippedIndexItem(i)->GetPlayerSkillType(); + int currentItemSkillLevel = this->GetActualSkillLevel(currentItemSkillType); + if ( currentItemSkillType == PLAYER_SKILL_BOW ) + { + int multiplier = GetMultiplierForSkillLevel(currentItemSkillLevel, 1, 1, 1, 1); + return multiplier * (currentItemSkillLevel & 0x3F); + } + else if ( currentItemSkillType == PLAYER_SKILL_BLASTER ) + { + int multiplier = GetMultiplierForSkillLevel(currentItemSkillLevel, 1, 2, 3, 5); + return multiplier * (currentItemSkillLevel & 0x3F); + } } } }
--- a/SpriteObject.cpp Tue Dec 03 09:22:28 2013 +0600 +++ b/SpriteObject.cpp Tue Dec 03 16:35:57 2013 +0600 @@ -206,8 +206,8 @@ //----- (00471C03) -------------------------------------------------------- void SpriteObject::UpdateObject_fn0_ODM(unsigned int uLayingItemID) { - SpriteObject *v1; // esi@1 - ObjectDesc *v2; // ebx@1 + //SpriteObject *v1; // esi@1 + ObjectDesc *object; // ebx@1 signed int v3; // edx@1 int v4; // ecx@1 int v5; // ST04_4@1 @@ -268,26 +268,26 @@ int v60; // [sp+A4h] [bp-4h]@11 uLayingItemID_ = uLayingItemID; - v1 = &pSpriteObjects[uLayingItemID]; + //v1 = &pSpriteObjects[uLayingItemID]; v58 = 0; - v2 = &pObjectList->pObjects[v1->uObjectDescID]; - v57 = IsTerrainSlopeTooHigh(v1->vPosition.x, v1->vPosition.y); - v3 = v1->vPosition.y; - v4 = v1->vPosition.x; - v5 = v2->uHeight; + object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; + v57 = IsTerrainSlopeTooHigh(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y); + v3 = pSpriteObjects[uLayingItemID].vPosition.y; + v4 = pSpriteObjects[uLayingItemID].vPosition.x; + v5 = object->uHeight; v55 = 0; - v6 = ODM_GetFloorLevel(v4, v3, v1->vPosition.z, v5, &on_water, &v55, 0); + v6 = ODM_GetFloorLevel(v4, v3, pSpriteObjects[uLayingItemID].vPosition.z, v5, &on_water, &v55, 0); v7 = v6; v54 = v6; v8 = v6 + 1; - if ( v1->vPosition.z <= v6 + 1 ) + if ( pSpriteObjects[uLayingItemID].vPosition.z <= v6 + 1 ) { if ( on_water ) { v9 = v6 + 60; if ( v55 ) v9 = v7 + 30; - sub_42F960_create_object(v1->vPosition.x, v1->vPosition.y, v9); + sub_42F960_create_object(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, v9); SpriteObject::OnInteraction(uLayingItemID_); } } @@ -295,60 +295,59 @@ { v58 = 1; } - v10 = v2->uFlags; - if ( !(v2->uFlags & OBJECT_DESC_NO_GRAVITY) ) + v10 = object->uFlags; + if ( !(object->uFlags & OBJECT_DESC_NO_GRAVITY) ) { if ( v58 ) { - v1->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); + pSpriteObjects[uLayingItemID].vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); goto LABEL_13; } if ( v57 ) { - v11 = v1->vPosition.y; - v12 = v1->vPosition.x; - v1->vPosition.z = v8; + v11 = pSpriteObjects[uLayingItemID].vPosition.y; + v12 = pSpriteObjects[uLayingItemID].vPosition.x; + pSpriteObjects[uLayingItemID].vPosition.z = v8; ODM_GetTerrainNormalAt(v12, v11, &v51); - v1->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); - v56 = abs(v51.y * v1->vVelocity.y + v51.z * v1->vVelocity.z + v51.x * v1->vVelocity.x) >> 16; + pSpriteObjects[uLayingItemID].vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); + v56 = abs(v51.y * pSpriteObjects[uLayingItemID].vVelocity.y + v51.z * pSpriteObjects[uLayingItemID].vVelocity.z + v51.x * pSpriteObjects[uLayingItemID].vVelocity.x) >> 16; //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.x) >> 16); - v1->vVelocity.x += fixpoint_mul(v56, v51.x); + pSpriteObjects[uLayingItemID].vVelocity.x += fixpoint_mul(v56, v51.x); //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.y) >> 16); - v1->vVelocity.y += fixpoint_mul(v56, v51.y); + pSpriteObjects[uLayingItemID].vVelocity.y += fixpoint_mul(v56, v51.y); //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.z) >> 16); - v1->vVelocity.z += fixpoint_mul(v56, v51.z); -LABEL_12: + pSpriteObjects[uLayingItemID].vVelocity.z += fixpoint_mul(v56, v51.z); v7 = v54; goto LABEL_13; } if ( v10 & 0x40 ) { - if ( v1->vPosition.z < v7 ) - v1->vPosition.z = v8; + if ( pSpriteObjects[uLayingItemID].vPosition.z < v7 ) + pSpriteObjects[uLayingItemID].vPosition.z = v8; if ( !_46BFFA_check_object_intercept(uLayingItemID_, 0) ) return; } - v1->vPosition.z = v8; - if ( !(v2->uFlags & OBJECT_DESC_BOUNCE) || (v21 = -v1->vVelocity.z >> 1, v1->vVelocity.z = v21, (signed __int16)v21 < 10) ) - v1->vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vPosition.z = v8; + if ( !(object->uFlags & OBJECT_DESC_BOUNCE) || (v21 = -pSpriteObjects[uLayingItemID].vVelocity.z >> 1, pSpriteObjects[uLayingItemID].vVelocity.z = v21, (signed __int16)v21 < 10) ) + pSpriteObjects[uLayingItemID].vVelocity.z = 0; - v1->vVelocity.x = fixpoint_mul(58500, v1->vVelocity.x); - v1->vVelocity.y = fixpoint_mul(58500, v1->vVelocity.y); - v1->vVelocity.z = fixpoint_mul(58500, v1->vVelocity.z); + pSpriteObjects[uLayingItemID].vVelocity.x = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.x); + pSpriteObjects[uLayingItemID].vVelocity.y = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.y); + pSpriteObjects[uLayingItemID].vVelocity.z = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.z); - if ( (v1->vVelocity.y * v1->vVelocity.y + v1->vVelocity.x * v1->vVelocity.x) < 400 ) + if ( (pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y + pSpriteObjects[uLayingItemID].vVelocity.x * pSpriteObjects[uLayingItemID].vVelocity.x) < 400 ) { - v1->vVelocity.y = 0; - v1->vVelocity.x = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; memset(&Dst, 0, 0x68u); - Dst.x = (double)v1->vPosition.x; - Dst.y = (double)v1->vPosition.y; - Dst.z = (double)v1->vPosition.z; + Dst.x = (double)pSpriteObjects[uLayingItemID].vPosition.x; + Dst.y = (double)pSpriteObjects[uLayingItemID].vPosition.y; + Dst.z = (double)pSpriteObjects[uLayingItemID].vPosition.z; Dst.r = 0.0; Dst.g = 0.0; Dst.b = 0.0; - if (v2->uFlags & OBJECT_DESC_TRIAL_FIRE ) + if (object->uFlags & OBJECT_DESC_TRIAL_FIRE ) { Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; Dst.uDiffuse = 0xFF3C1E; @@ -357,7 +356,7 @@ Dst.flt_28 = 1.0; pGame->pParticleEngine->AddParticle(&Dst); } - else if ( v2->uFlags & OBJECT_DESC_TRIAL_LINE) + else if ( object->uFlags & OBJECT_DESC_TRIAL_LINE) { Dst.type = ParticleType_Line; @@ -367,7 +366,7 @@ Dst.flt_28 = 1.0; pGame->pParticleEngine->AddParticle(&Dst); } - else if ( v2->uFlags & OBJECT_DESC_TRIAL_PARTICLE ) + else if ( object->uFlags & OBJECT_DESC_TRIAL_PARTICLE ) { Dst.type = ParticleType_Bitmap | ParticleType_8; Dst.uDiffuse = rand(); @@ -380,49 +379,49 @@ } } LABEL_13: - if ( v1->vPosition.z > v7 - && (v13 = v1->vPosition.x, v13 >= -0x8000) + if ( pSpriteObjects[uLayingItemID].vPosition.z > v7 + && (v13 = pSpriteObjects[uLayingItemID].vPosition.x, v13 >= -0x8000) && v13 <= 0x8000 - && (v14 = v1->vPosition.y, v14 >= -0x8000) + && (v14 = pSpriteObjects[uLayingItemID].vPosition.y, v14 >= -0x8000) && v14 <= 0x8000 - && v1->vPosition.z <= 13000 - || !(v2->uFlags & OBJECT_DESC_INTERACTABLE) ) + && pSpriteObjects[uLayingItemID].vPosition.z <= 13000 + || !(object->uFlags & OBJECT_DESC_INTERACTABLE) ) goto LABEL_92; - if ( v1->vPosition.z < v7 ) - v1->vPosition.z = v8; + if ( pSpriteObjects[uLayingItemID].vPosition.z < v7 ) + pSpriteObjects[uLayingItemID].vPosition.z = v8; if ( _46BFFA_check_object_intercept(uLayingItemID_, 0) ) { LABEL_92: stru_721530.field_0 = 0; v55 = 0; - stru_721530.prolly_normal_d = v2->uRadius; - stru_721530.height = v2->uHeight; + stru_721530.prolly_normal_d = object->uRadius; + stru_721530.height = object->uHeight; stru_721530.field_8_radius = 0; stru_721530.field_70 = 0; while ( 1 ) { - stru_721530.position.x = v1->vPosition.x; + stru_721530.position.x = pSpriteObjects[uLayingItemID].vPosition.x; stru_721530.normal.x = stru_721530.position.x; - v15 = v1->vPosition.y; + v15 = pSpriteObjects[uLayingItemID].vPosition.y; stru_721530.uSectorID = 0; stru_721530.position.y = v15; stru_721530.normal.y = v15; - stru_721530.position.z = v1->vPosition.z + stru_721530.prolly_normal_d + 1; + stru_721530.position.z = pSpriteObjects[uLayingItemID].vPosition.z + stru_721530.prolly_normal_d + 1; stru_721530.normal.z = stru_721530.position.z; - stru_721530.velocity.x = v1->vVelocity.x; - stru_721530.velocity.y = v1->vVelocity.y; - stru_721530.velocity.z = v1->vVelocity.z; + stru_721530.velocity.x = pSpriteObjects[uLayingItemID].vVelocity.x; + stru_721530.velocity.y = pSpriteObjects[uLayingItemID].vVelocity.y; + stru_721530.velocity.z = pSpriteObjects[uLayingItemID].vVelocity.z; if ( stru_721530._47050A(0) ) return; _46E889_collide_against_bmodels(0); - v16 = WorldPosToGridCellZ(v1->vPosition.y); - v18 = WorldPosToGridCellX(v1->vPosition.x); + v16 = WorldPosToGridCellZ(pSpriteObjects[uLayingItemID].vPosition.y); + v18 = WorldPosToGridCellX(pSpriteObjects[uLayingItemID].vPosition.x); _46E26D_collide_against_sprites(v18, v16); - if (PID_TYPE(v1->spell_caster_pid) != OBJECT_Player) + if (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) _46EF01_collision_chech_player(0); - if (PID_TYPE(v1->spell_caster_pid) == OBJECT_Actor) + if (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor) { - v19 = PID_ID(v1->spell_caster_pid); + v19 = PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid); if (( v19 >= 0 )&&( v19 < (signed int)(uNumActors - 1) )) { @@ -441,38 +440,32 @@ Actor::_46DF1A_collide_against_actor(i, 0); } v26 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; - v27 = ODM_GetFloorLevel( - stru_721530.normal2.x, - stru_721530.normal2.y, - stru_721530.normal2.z - stru_721530.prolly_normal_d - 1, - v2->uHeight, - &v49, - &v50, - 0); + v27 = ODM_GetFloorLevel( stru_721530.normal2.x, stru_721530.normal2.y, stru_721530.normal2.z - stru_721530.prolly_normal_d - 1, + object->uHeight, &v49, &v50, 0); if ( on_water && v26 < v27 + 60 ) { if ( v50 ) v44 = v27 + 30; else v44 = v54 + 60; - sub_42F960_create_object(v1->vPosition.x, v1->vPosition.y, v44); + sub_42F960_create_object(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, v44); SpriteObject::OnInteraction(uLayingItemID_); return; } 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); + pSpriteObjects[uLayingItemID].vPosition.x = stru_721530.normal2.x; + pSpriteObjects[uLayingItemID].vPosition.y = stru_721530.normal2.y; + pSpriteObjects[uLayingItemID].vPosition.z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; + pSpriteObjects[uLayingItemID].uSectorID = LOWORD(stru_721530.uSectorID); memset(&Dst, 0, 0x68u); - Dst.x = (double)v1->vPosition.x; - Dst.y = (double)v1->vPosition.y; - Dst.z = (double)v1->vPosition.z; + Dst.x = (double)pSpriteObjects[uLayingItemID].vPosition.x; + Dst.y = (double)pSpriteObjects[uLayingItemID].vPosition.y; + Dst.z = (double)pSpriteObjects[uLayingItemID].vPosition.z; Dst.r = 0.0; Dst.g = 0.0; Dst.b = 0.0; - if ( v2->uFlags & OBJECT_DESC_TRIAL_FIRE ) + if ( object->uFlags & OBJECT_DESC_TRIAL_FIRE ) { Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; Dst.uDiffuse = 0xFF3C1E; @@ -482,7 +475,7 @@ pGame->pParticleEngine->AddParticle(&Dst); return; } - else if ( v2->uFlags & OBJECT_DESC_TRIAL_LINE ) + else if ( object->uFlags & OBJECT_DESC_TRIAL_LINE ) { Dst.type = ParticleType_Line; Dst.uTextureID = 0; @@ -492,31 +485,31 @@ pGame->pParticleEngine->AddParticle(&Dst); return; } - else if ( v2->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - { - Dst.type = ParticleType_Bitmap | ParticleType_8; - Dst.uDiffuse = rand(); - Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; - Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); - Dst.flt_28 = 1.0; - pGame->pParticleEngine->AddParticle(&Dst); - } + else if ( object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) + { + Dst.type = ParticleType_Bitmap | ParticleType_8; + Dst.uDiffuse = rand(); + Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; + Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); + Dst.flt_28 = 1.0; + pGame->pParticleEngine->AddParticle(&Dst); + } return; } //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.x) >> 16); - v1->vPosition.x += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.x); + pSpriteObjects[uLayingItemID].vPosition.x += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.x); //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.y) >> 16); - v1->vPosition.y += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.y); + pSpriteObjects[uLayingItemID].vPosition.y += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.y); //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.z) >> 16); v28 = LOWORD(stru_721530.uSectorID); - v1->vPosition.z += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.z); - v29 = v1->vPosition.z; - v1->uSectorID = v28; + pSpriteObjects[uLayingItemID].vPosition.z += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.z); + v29 = pSpriteObjects[uLayingItemID].vPosition.z; + pSpriteObjects[uLayingItemID].uSectorID = v28; stru_721530.field_70 += stru_721530.field_7C; - if ( v2->uFlags & OBJECT_DESC_INTERACTABLE ) + if ( object->uFlags & OBJECT_DESC_INTERACTABLE ) { if ( v29 < v54 ) - v1->vPosition.z = v54 + 1; + pSpriteObjects[uLayingItemID].vPosition.z = v54 + 1; if ( !_46BFFA_check_object_intercept(uLayingItemID_, stru_721530.uFaceID) ) return; } @@ -529,8 +522,8 @@ v32 = &v31->pFaces[v30 & 0x3F]; if ( v32->uPolygonType != 3 ) { - v56 = abs(v32->pFacePlane.vNormal.z * v1->vVelocity.z + v32->pFacePlane.vNormal.y * v1->vVelocity.y - + v32->pFacePlane.vNormal.x * v1->vVelocity.x) >> 16; + v56 = abs(v32->pFacePlane.vNormal.z * pSpriteObjects[uLayingItemID].vVelocity.z + v32->pFacePlane.vNormal.y * pSpriteObjects[uLayingItemID].vVelocity.y + + v32->pFacePlane.vNormal.x * pSpriteObjects[uLayingItemID].vVelocity.x) >> 16; if ( (stru_721530.speed >> 3) > v56 ) v56 = stru_721530.speed >> 3; v57 = v32->pFacePlane.vNormal.x; @@ -538,8 +531,8 @@ v58 = v32->pFacePlane.vNormal.y; v58 = (unsigned __int64)(v56 * (signed __int64)v58) >> 16; v60 = ((unsigned __int64)(v56 * (signed __int64)v32->pFacePlane.vNormal.z) >> 16); - v1->vVelocity.x += 2 * v57; - v1->vVelocity.y += 2 * v58; + pSpriteObjects[uLayingItemID].vVelocity.x += 2 * v57; + pSpriteObjects[uLayingItemID].vVelocity.y += 2 * v58; if ( v32->pFacePlane.vNormal.z <= 32000 ) { v37 = 2 * (short)v60; @@ -547,30 +540,33 @@ else { v36 = v60; - v1->vVelocity.z += (signed __int16)v60; + pSpriteObjects[uLayingItemID].vVelocity.z += (signed __int16)v60; v58 = (unsigned __int64)(32000 * (signed __int64)(signed int)v36) >> 16; v37 = (unsigned int)(32000 * v36) >> 16; } - v1->vVelocity.z += v37; -LABEL_70: + pSpriteObjects[uLayingItemID].vVelocity.z += v37; if ( BYTE3(v32->uAttributes) & 0x10 ) EventProcessor(v32->sCogTriggeredID, 0, 1); goto LABEL_74; } v33 = v31->pVertices.pVertices[v32->pVertexIDs[0]].z; - v34 = v1->vVelocity.x; - v1->vPosition.z = v33 + 1; - if ( v1->vVelocity.y * v1->vVelocity.y + v34 * v34 >= 400 ) - goto LABEL_70; + v34 = pSpriteObjects[uLayingItemID].vVelocity.x; + pSpriteObjects[uLayingItemID].vPosition.z = v33 + 1; + if ( pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y + v34 * v34 >= 400 ) + { + if ( BYTE3(v32->uAttributes) & 0x10 ) + EventProcessor(v32->sCogTriggeredID, 0, 1); + goto LABEL_74; + } LOWORD(v35) = 0; - v1->vVelocity.z = 0; - v1->vVelocity.x = 0; - goto LABEL_73; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = v35; } LABEL_74: - v1->vVelocity.x = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)v1->vVelocity.x) >> 16); - v1->vVelocity.y = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)v1->vVelocity.y) >> 16); - v1->vVelocity.z = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)v1->vVelocity.z) >> 16); + pSpriteObjects[uLayingItemID].vVelocity.x = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)pSpriteObjects[uLayingItemID].vVelocity.x) >> 16); + pSpriteObjects[uLayingItemID].vVelocity.y = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)pSpriteObjects[uLayingItemID].vVelocity.y) >> 16); + pSpriteObjects[uLayingItemID].vVelocity.z = (signed __int16)((unsigned __int64)(58500i64 * (signed __int64)(signed int)pSpriteObjects[uLayingItemID].vVelocity.z) >> 16); ++v55; //v43 = __OFSUB__(v55, 100); @@ -578,22 +574,19 @@ if (v55>=100 )//!(v42 ^ v43) return; } - v57 = integer_sqrt(v1->vVelocity.y * v1->vVelocity.y + v1->vVelocity.x * v1->vVelocity.x); - v38 = stru_5C6E00->Atan2( - v1->vPosition.x - pLevelDecorations[v30].vPosition.x, - v1->vPosition.y - pLevelDecorations[v30].vPosition.y); + v57 = integer_sqrt(pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y + pSpriteObjects[uLayingItemID].vVelocity.x * pSpriteObjects[uLayingItemID].vVelocity.x); + v38 = stru_5C6E00->Atan2(pSpriteObjects[uLayingItemID].vPosition.x - pLevelDecorations[v30].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y - pLevelDecorations[v30].vPosition.y); v56 = v38; v39 = stru_5C6E00->Cos(v38); // v60 = v39; v40 = v39 * (signed __int64)v57; v58 = v40 >> 16; - v1->vVelocity.x = WORD1(v40); + pSpriteObjects[uLayingItemID].vVelocity.x = WORD1(v40); v41 = stru_5C6E00->Sin(v56 - stru_5C6E00->uIntegerHalfPi); // v60 = v41; v35 = (unsigned __int64)(v41 * (signed __int64)v57) >> 16; v58 = v35; -LABEL_73: - v1->vVelocity.y = v35; + pSpriteObjects[uLayingItemID].vVelocity.y = v35; goto LABEL_74; } }
--- a/mm7_data.cpp Tue Dec 03 09:22:28 2013 +0600 +++ b/mm7_data.cpp Tue Dec 03 16:35:57 2013 +0600 @@ -1234,8 +1234,8 @@ std::array<int, 20> dword_720E80; std::array<int, 20> dword_720ED0; std::array<int, 20> ceiling_height_level; -std::array<__int16, 777> word_720F70; // idb -std::array<__int16, 777> word_721040; // idb +std::array<__int16, 777> FloorFaceVertCoord_Y; // idb +std::array<__int16, 777> FloorFaceVertCoord_X; // idb std::array<int, 777> dword_721110; // idb std::array<int, 777> dword_721160; // idb std::array<int, 20> odm_floor_level; // idb
--- a/mm7_data.h Tue Dec 03 09:22:28 2013 +0600 +++ b/mm7_data.h Tue Dec 03 16:35:57 2013 +0600 @@ -908,8 +908,8 @@ extern std::array<int, 20> dword_720E80; extern std::array<int, 20> dword_720ED0; extern std::array<int, 20> ceiling_height_level; -extern std::array<__int16, 777> word_720F70; // idb -extern std::array<__int16, 777> word_721040; // idb +extern std::array<__int16, 777> FloorFaceVertCoord_Y; // idb +extern std::array<__int16, 777> FloorFaceVertCoord_X; // idb extern std::array<int, 777> dword_721110; // idb extern std::array<int, 777> dword_721160; // idb extern std::array<int, 20> odm_floor_level; // idb dword_7211B0