Mercurial > mm7
comparison mm7_5.cpp @ 1616:de6e646822a6
mul <> sub0 difference
author | zipi |
---|---|
date | Sat, 14 Sep 2013 22:43:45 +0100 |
parents | 89dec2be255f |
children | 2c71fa8913d2 |
comparison
equal
deleted
inserted
replaced
1615:89dec2be255f | 1616:de6e646822a6 |
---|---|
4484 || higher_z < v29->pBounding.z1 ) | 4484 || higher_z < v29->pBounding.z1 ) |
4485 { | 4485 { |
4486 continue; | 4486 continue; |
4487 } | 4487 } |
4488 | 4488 |
4489 v32 = fixpoint_mul(v29->pFacePlane_old.vNormal.x,v49); | 4489 v32 = fixpoint_sub0(v29->pFacePlane_old.vNormal.x,v49); |
4490 v33 = fixpoint_mul(v29->pFacePlane_old.vNormal.z,v47); | 4490 v33 = fixpoint_sub0(v29->pFacePlane_old.vNormal.z,v47); |
4491 v34 = fixpoint_mul(v29->pFacePlane_old.vNormal.y,v48); | 4491 v34 = fixpoint_sub0(v29->pFacePlane_old.vNormal.y,v48); |
4492 v59 = v32 + v33 + v34; | 4492 v59 = v32 + v33 + v34; |
4493 if ( v59 ) | 4493 if ( v59 ) |
4494 { | 4494 { |
4495 v70 = v29->pFacePlane_old.dist | 4495 v70 = v29->pFacePlane_old.dist |
4496 + obj1_z * v29->pFacePlane_old.vNormal.z | 4496 + obj1_z * v29->pFacePlane_old.vNormal.z |
4516 | 4516 |
4517 v58 = fixpoint_sub2(v38,v59); | 4517 v58 = fixpoint_sub2(v38,v59); |
4518 | 4518 |
4519 if( v58 < 0 ) | 4519 if( v58 < 0 ) |
4520 { | 4520 { |
4521 //TEMPORARY | 4521 continue; |
4522 //continue; | |
4523 } | 4522 } |
4524 | 4523 |
4525 if(!sub_4075DB( | 4524 if(!sub_4075DB( |
4526 obj1_x + ((fixpoint_mul(v49,v58) + 32768) >> 16), | 4525 obj1_x + ((fixpoint_sub0(v49,v58) + 32768) >> 16), |
4527 obj1_y + ((fixpoint_mul(v48,v58) + 32768) >> 16), | 4526 obj1_y + ((fixpoint_sub0(v48,v58) + 32768) >> 16), |
4528 obj1_z + ((fixpoint_mul(v47,v58) + 32768) >> 16), | 4527 obj1_z + ((fixpoint_sub0(v47,v58) + 32768) >> 16), |
4529 v29) ) | 4528 v29) ) |
4530 { | 4529 { |
4531 //TEMPORARY | 4530 continue; |
4532 //continue; | |
4533 } | 4531 } |
4534 | 4532 |
4535 //if there is no next sector turn back | 4533 //if there is no next sector turn back |
4536 if ( v29->uSectorID == current_sector ) | 4534 if ( v29->uSectorID == current_sector ) |
4537 next_sector = v29->uBackSectorID; | 4535 next_sector = v29->uBackSectorID; |
4569 return 0; | 4567 return 0; |
4570 return 1; | 4568 return 1; |
4571 } | 4569 } |
4572 | 4570 |
4573 //----- (004075DB) -------------------------------------------------------- | 4571 //----- (004075DB) -------------------------------------------------------- |
4574 bool __fastcall sub_4075DB(int a1, int a2, int a3, BLVFace *a4) | 4572 bool __fastcall sub_4075DB(int x, int y, int z, BLVFace *a4) |
4575 { | 4573 { |
4576 unsigned int v5; // esi@1 | 4574 unsigned int v5; // esi@1 |
4577 char v7; // zf@2 | 4575 char v7; // zf@2 |
4578 int v8; // edi@2 | 4576 int v8; // edi@2 |
4579 Vec3_short_ *v9; // ecx@3 | 4577 Vec3_short_ *v9; // ecx@3 |
4600 | 4598 |
4601 v5 = a4->uAttributes; | 4599 v5 = a4->uAttributes; |
4602 v9 = pIndoor->pVertices; | 4600 v9 = pIndoor->pVertices; |
4603 if ( v5 & FACE_XY_PLANE ) | 4601 if ( v5 & FACE_XY_PLANE ) |
4604 { | 4602 { |
4605 a4a = a1; | 4603 a4a = x; |
4606 v8 = a2; | 4604 v8 = y; |
4607 for(int i = 0; i < a4->uNumVertices; i++) | 4605 for(int i = 0; i < a4->uNumVertices; i++) |
4608 { | 4606 { |
4609 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].x; | 4607 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].x; |
4610 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].y; | 4608 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].y; |
4611 } | 4609 } |
4612 } | 4610 } |
4613 else | 4611 else |
4614 { | 4612 { |
4615 v8 = a3; | 4613 v8 = z; |
4616 if ( v5 & FACE_XY_PLANE ) | 4614 if ( v5 & FACE_XZ_PLANE ) |
4617 { | 4615 { |
4618 a4a = a1; | 4616 a4a = x; |
4619 for(int i = 0; i < a4->uNumVertices; i++) | 4617 for(int i = 0; i < a4->uNumVertices; i++) |
4620 { | 4618 { |
4621 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].x; | 4619 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].x; |
4622 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].z; | 4620 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].z; |
4623 } | 4621 } |
4624 } | 4622 } |
4625 else | 4623 else |
4626 { | 4624 { |
4627 a4a = a2; | 4625 a4a = y; |
4628 for(int i = 0; i < a4->uNumVertices; i++) | 4626 for(int i = 0; i < a4->uNumVertices; i++) |
4629 { | 4627 { |
4630 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].y; | 4628 dword_4F5D98_xs[i] = v9[a4->pVertexIDs[i]].y; |
4631 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].z; | 4629 dword_4F5CC8_ys[i] = v9[a4->pVertexIDs[i]].z; |
4632 } | 4630 } |
4648 //dword_4F5D98_xs[i] + ((signed int)(((unsigned __int64)(v26 / (dword_4F5CC4_ys[i + 2] - dword_4F5CC4_ys[i + 1])* ((v8 - dword_4F5CC4_ys[i + 1]) << 16)) >> 16) | 4646 //dword_4F5D98_xs[i] + ((signed int)(((unsigned __int64)(v26 / (dword_4F5CC4_ys[i + 2] - dword_4F5CC4_ys[i + 1])* ((v8 - dword_4F5CC4_ys[i + 1]) << 16)) >> 16) |
4649 // + 32768) >> 16) >= a4a) ) | 4647 // + 32768) >> 16) >= a4a) ) |
4650 else | 4648 else |
4651 { | 4649 { |
4652 v25 = fixpoint_sub2(dword_4F5D98_xs[i + 1] - dword_4F5D98_xs[i], dword_4F5CC8_ys[i + 1] - dword_4F5CC8_ys[i]); | 4650 v25 = fixpoint_sub2(dword_4F5D98_xs[i + 1] - dword_4F5D98_xs[i], dword_4F5CC8_ys[i + 1] - dword_4F5CC8_ys[i]); |
4653 if( dword_4F5D98_xs[i] + (fixpoint_mul(v25, (v8 - dword_4F5CC8_ys[i]) << 16) + 32768 >> 16) >= a4a) | 4651 if( dword_4F5D98_xs[i] + (fixpoint_sub0(v25, (v8 - dword_4F5CC8_ys[i]) << 16) + 32768 >> 16) >= a4a) |
4654 ++a3a; | 4652 ++a3a; |
4655 } | 4653 } |
4656 } | 4654 } |
4657 } | 4655 } |
4658 } | 4656 } |