Mercurial > mm7
comparison mm7_5.cpp @ 1493:9e9a12506d51
player detection partly working
author | zipi |
---|---|
date | Fri, 30 Aug 2013 22:23:54 +0100 |
parents | 7ef4b64f6329 |
children | ff1867836af5 |
comparison
equal
deleted
inserted
replaced
1492:480b09200f88 | 1493:9e9a12506d51 |
---|---|
4314 return v6; | 4314 return v6; |
4315 } | 4315 } |
4316 | 4316 |
4317 | 4317 |
4318 //----- (004070EF) -------------------------------------------------------- | 4318 //----- (004070EF) -------------------------------------------------------- |
4319 bool __fastcall sub_4070EF_prolly_collide_objects(unsigned int uObjID, unsigned int uObj2ID) | 4319 bool __fastcall sub_4070EF_prolly_detect_player(unsigned int uObjID, unsigned int uObj2ID) |
4320 { | 4320 { |
4321 signed int v2; // eax@1 | 4321 signed int v2; // eax@1 |
4322 unsigned int v3; // ecx@1 | 4322 //unsigned int v3; // ecx@1 |
4323 signed int v4; // esi@1 | 4323 //signed int v4; // esi@1 |
4324 int v5; // ecx@2 | 4324 int v5; // ecx@2 |
4325 signed int v6; // eax@4 | 4325 signed int v6; // eax@4 |
4326 int v7; // eax@4 | 4326 int object1_sector; // eax@4 |
4327 float v8; // ST24_4@5 | 4327 float v8; // ST24_4@5 |
4328 double v9; // ST18_8@5 | 4328 double v9; // ST18_8@5 |
4329 signed int v10; // eax@6 | 4329 signed int v10; // eax@6 |
4330 int v11; // ecx@6 | 4330 int v11; // ecx@6 |
4331 signed int v12; // eax@7 | 4331 signed int v12; // eax@7 |
4332 int v13; // esi@7 | 4332 int v13; // esi@7 |
4333 int v14; // esi@8 | 4333 int v14; // esi@8 |
4334 int v15; // esi@9 | 4334 int v15; // esi@9 |
4335 signed int v16; // eax@11 | 4335 signed int v16; // eax@11 |
4336 int v17; // edi@11 | 4336 int obj2_z; // edi@11 |
4337 int v18; // esi@11 | 4337 int obj2_x; // esi@11 |
4338 int v19; // eax@13 | 4338 int obj2_sector; // eax@13 |
4339 float v20; // ST24_4@14 | 4339 float v20; // ST24_4@14 |
4340 double v21; // ST18_8@14 | 4340 double v21; // ST18_8@14 |
4341 signed int v22; // eax@15 | 4341 signed int v22; // eax@15 |
4342 int v23; // ebx@16 | 4342 int dist2_x; // ebx@16 |
4343 signed int v24; // ecx@16 | 4343 signed int v24; // ecx@16 |
4344 int v25; // eax@18 | 4344 int v25; // eax@18 |
4345 int v26; // eax@28 | 4345 //int v26; // eax@28 |
4346 BLVSector *v27; // edx@31 | 4346 //BLVSector *v27; // edx@31 |
4347 int v28; // ecx@31 | 4347 //int v28; // ecx@31 |
4348 BLVFace *v29; // ebx@32 | 4348 BLVFace *v29; // ebx@32 |
4349 Vec3_short_ *v30; // esi@32 | 4349 Vec3_short_ *v30; // esi@32 |
4350 int v31; // eax@32 | 4350 int v31; // eax@32 |
4351 int v32; // ST50_4@44 | 4351 int v32; // ST50_4@44 |
4352 int v33; // ST54_4@44 | 4352 int v33; // ST54_4@44 |
4358 int v39; // ST4C_4@49 | 4358 int v39; // ST4C_4@49 |
4359 signed __int64 v40; // qtt@50 | 4359 signed __int64 v40; // qtt@50 |
4360 __int16 v42; // bx@58 | 4360 __int16 v42; // bx@58 |
4361 int v43; // [sp-8h] [bp-70h]@11 | 4361 int v43; // [sp-8h] [bp-70h]@11 |
4362 int v44; // [sp-4h] [bp-6Ch]@11 | 4362 int v44; // [sp-4h] [bp-6Ch]@11 |
4363 int v45; // [sp+Ch] [bp-5Ch]@32 | 4363 //int v45; // [sp+Ch] [bp-5Ch]@32 |
4364 __int16 v46; // [sp+10h] [bp-58h]@32 | 4364 //__int16 v46; // [sp+10h] [bp-58h]@32 |
4365 int v47; // [sp+18h] [bp-50h]@20 | 4365 int v47; // [sp+18h] [bp-50h]@20 |
4366 int v48; // [sp+1Ch] [bp-4Ch]@20 | 4366 int v48; // [sp+1Ch] [bp-4Ch]@20 |
4367 int v49; // [sp+20h] [bp-48h]@20 | 4367 int v49; // [sp+20h] [bp-48h]@20 |
4368 int v50; // [sp+24h] [bp-44h]@16 | 4368 int dist2_z; // [sp+24h] [bp-44h]@16 |
4369 signed int v51; // [sp+24h] [bp-44h]@27 | 4369 signed int v51; // [sp+24h] [bp-44h]@27 |
4370 signed int v52; // [sp+28h] [bp-40h]@26 | 4370 signed int v52; // [sp+28h] [bp-40h]@26 |
4371 signed int v53; // [sp+2Ch] [bp-3Ch]@23 | 4371 signed int v53; // [sp+2Ch] [bp-3Ch]@23 |
4372 signed int v54; // [sp+30h] [bp-38h]@22 | 4372 signed int v54; // [sp+30h] [bp-38h]@22 |
4373 signed int v55; // [sp+34h] [bp-34h]@21 | 4373 signed int v55; // [sp+34h] [bp-34h]@21 |
4374 signed int v56; // [sp+38h] [bp-30h]@20 | 4374 signed int v56; // [sp+38h] [bp-30h]@20 |
4375 signed int v57; // [sp+3Ch] [bp-2Ch]@28 | 4375 signed int v57; // [sp+3Ch] [bp-2Ch]@28 |
4376 int v58; // [sp+44h] [bp-24h]@50 | 4376 int v58; // [sp+44h] [bp-24h]@50 |
4377 int v59; // [sp+48h] [bp-20h]@44 | 4377 int v59; // [sp+48h] [bp-20h]@44 |
4378 int v60; // [sp+50h] [bp-18h]@11 | 4378 int obj2_y; // [sp+50h] [bp-18h]@11 |
4379 signed int v61; // [sp+50h] [bp-18h]@31 | 4379 signed int v61; // [sp+50h] [bp-18h]@31 |
4380 int v62; // [sp+54h] [bp-14h]@16 | 4380 //int v62; // [sp+54h] [bp-14h]@16 |
4381 int v63; // [sp+58h] [bp-10h]@4 | 4381 int obj_x; // [sp+58h] [bp-10h]@4 |
4382 int v64; // [sp+5Ch] [bp-Ch]@4 | 4382 int obj_y; // [sp+5Ch] [bp-Ch]@4 |
4383 int v65; // [sp+60h] [bp-8h]@4 | 4383 int obj_z; // [sp+60h] [bp-8h]@4 |
4384 int v66; // [sp+64h] [bp-4h]@7 | 4384 int v66; // [sp+64h] [bp-4h]@7 |
4385 | 4385 |
4386 v2 = PID_ID(uObjID); | 4386 v2 = PID_ID(uObjID); |
4387 v3 = PID_TYPE(uObjID) - 2; | 4387 if ( PID_TYPE(uObjID) == 5 ) |
4388 v4 = uObj2ID; | |
4389 if ( v3 ) | |
4390 { | 4388 { |
4391 v5 = v3 - 1; | |
4392 if ( v5 ) | |
4393 { | |
4394 if ( v5 != 2 ) | |
4395 return 0; | |
4396 v6 = v2; | 4389 v6 = v2; |
4397 v63 = pLevelDecorations[v6].vPosition.x; | 4390 obj_x = pLevelDecorations[v6].vPosition.x; |
4398 v64 = pLevelDecorations[v6].vPosition.y; | 4391 obj_y = pLevelDecorations[v6].vPosition.y; |
4399 v65 = pLevelDecorations[v6].vPosition.z; | 4392 obj_z = pLevelDecorations[v6].vPosition.z; |
4400 v7 = pIndoor->GetSector(v63, v64, v65); | 4393 object1_sector = pIndoor->GetSector(obj_x, obj_y, obj_z); |
4401 } | 4394 } |
4402 else | 4395 else if ( PID_TYPE(uObjID) == 3 ) |
4403 { | 4396 { |
4404 v63 = pActors[v2].vPosition.x; | 4397 obj_x = pActors[v2].vPosition.x; |
4405 v64 = pActors[v2].vPosition.y; | 4398 obj_y = pActors[v2].vPosition.y; |
4406 v8 = (double)pActors[v2].uActorHeight * 0.69999999; | 4399 v8 = (double)pActors[v2].uActorHeight * 0.69999999; |
4407 v9 = v8 + 6.7553994e15; | 4400 //v9 = v8 + 6.7553994e15; |
4408 v65 = LODWORD(v9) + pActors[v2].vPosition.z; | 4401 //obj_z = LODWORD(v9) + pActors[v2].vPosition.z; |
4409 v7 = pActors[v2].uSectorID; | 4402 obj_z = (int)v8 + pActors[v2].vPosition.z; |
4410 } | 4403 object1_sector = pActors[v2].uSectorID; |
4404 } | |
4405 else if ( PID_TYPE(uObjID) == 2 ) | |
4406 { | |
4407 v10 = v2; | |
4408 obj_x = pSpriteObjects[v10].vPosition.x; | |
4409 obj_y = pSpriteObjects[v10].vPosition.y; | |
4410 obj_z = pSpriteObjects[v10].vPosition.z; | |
4411 object1_sector = pSpriteObjects[v10].uSectorID; | |
4411 } | 4412 } |
4412 else | 4413 else |
4414 return 0; | |
4415 v66 = object1_sector; | |
4416 v12 = PID_ID(uObj2ID); | |
4417 if ( PID_TYPE(uObj2ID) == 5) | |
4413 { | 4418 { |
4414 v10 = v2; | 4419 v16 = v12; |
4415 v63 = pSpriteObjects[v10].vPosition.x; | 4420 obj2_z = pLevelDecorations[v16].vPosition.z; |
4416 v64 = pSpriteObjects[v10].vPosition.y; | 4421 obj2_x = pLevelDecorations[v16].vPosition.x; |
4417 v11 = pSpriteObjects[v10].vPosition.z; | 4422 obj2_y = pLevelDecorations[v16].vPosition.y; |
4418 v7 = pSpriteObjects[v10].uSectorID; | 4423 obj2_sector = pIndoor->GetSector(obj2_x, obj2_y, obj2_z); |
4419 v65 = v11; | 4424 } |
4425 else if ( PID_TYPE(uObj2ID) == 4) | |
4426 { | |
4427 obj2_x = pParty->vPosition.x; | |
4428 obj2_z = pParty->sEyelevel + pParty->vPosition.z; | |
4429 obj2_y = pParty->vPosition.y; | |
4430 obj2_sector = pIndoor->GetSector(obj2_x, obj2_y, obj2_z); | |
4431 } | |
4432 | |
4433 else if( PID_TYPE(uObj2ID) == 3) | |
4434 { | |
4435 obj2_y = pActors[v12].vPosition.y; | |
4436 obj2_x = pActors[v12].vPosition.x; | |
4437 v20 = (double)pActors[v12].uActorHeight * 0.69999999; | |
4438 //v21 = v20 + 6.7553994e15; | |
4439 //obj2_z = LODWORD(v21) + pActors[v12].vPosition.z; | |
4440 obj2_z = (int)v20 + pActors[v12].vPosition.z; | |
4441 obj2_sector = pActors[v12].uSectorID; | |
4420 } | 4442 } |
4421 v66 = v7; | 4443 |
4422 v12 = PID_ID(v4); | 4444 else if ( PID_TYPE(uObj2ID) == 2) |
4423 v13 = PID_TYPE(v4) - 2; | |
4424 if ( v13 ) | |
4425 { | 4445 { |
4426 v14 = v13 - 1; | 4446 v22 = v12; |
4427 if ( v14 ) | 4447 obj2_x = pSpriteObjects[v22].vPosition.x; |
4428 { | 4448 obj2_z = pSpriteObjects[v22].vPosition.z; |
4429 v15 = v14 - 1; | 4449 obj2_y = pSpriteObjects[v22].vPosition.y; |
4430 if ( v15 ) | 4450 obj2_sector = pSpriteObjects[v22].uSectorID; |
4431 { | |
4432 if ( v15 != 1 ) | |
4433 return 0; | |
4434 v16 = v12; | |
4435 v17 = pLevelDecorations[v16].vPosition.z; | |
4436 v18 = pLevelDecorations[v16].vPosition.x; | |
4437 v44 = pLevelDecorations[v16].vPosition.z; | |
4438 v60 = pLevelDecorations[v16].vPosition.y; | |
4439 v43 = pLevelDecorations[v16].vPosition.y; | |
4440 } | |
4441 else | |
4442 { | |
4443 v18 = pParty->vPosition.x; | |
4444 v17 = pParty->sEyelevel + pParty->vPosition.z; | |
4445 v60 = pParty->vPosition.y; | |
4446 v44 = pParty->sEyelevel + pParty->vPosition.z; | |
4447 v43 = pParty->vPosition.y; | |
4448 } | |
4449 v19 = pIndoor->GetSector(v18, v43, v44); | |
4450 } | |
4451 else | |
4452 { | |
4453 v60 = pActors[v12].vPosition.y; | |
4454 v18 = pActors[v12].vPosition.x; | |
4455 v20 = (double)pActors[v12].uActorHeight * 0.69999999; | |
4456 v21 = v20 + 6.7553994e15; | |
4457 v17 = LODWORD(v21) + pActors[v12].vPosition.z; | |
4458 v19 = pActors[v12].uSectorID; | |
4459 } | |
4460 } | 4451 } |
4461 else | 4452 else |
4462 { | 4453 return 0; |
4463 v22 = v12; | 4454 dist2_x = obj2_x - obj_x; |
4464 v18 = pSpriteObjects[v22].vPosition.x; | 4455 dist2_z = obj2_z - obj_z; |
4465 v17 = pSpriteObjects[v22].vPosition.z; | 4456 v24 = integer_sqrt(dist2_x * dist2_x + (obj2_y - obj_y) * (obj2_y - obj_y) + dist2_z * dist2_z); |
4466 v60 = pSpriteObjects[v22].vPosition.y; | |
4467 v19 = pSpriteObjects[v22].uSectorID; | |
4468 } | |
4469 v62 = v19; | |
4470 v23 = v18 - v63; | |
4471 v50 = v17 - v65; | |
4472 v24 = integer_sqrt(v23 * v23 + (v60 - v64) * (v60 - v64) + v50 * v50); | |
4473 if ( v24 > 5120 ) | 4457 if ( v24 > 5120 ) |
4474 return 0; | 4458 return 0; |
4475 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) | 4459 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
4476 return 1; | 4460 return 1; |
4477 v25 = 65536; | 4461 v25 = 65536; |
4478 if ( v24 ) | 4462 if ( v24 ) |
4479 v25 = 65536 / v24; | 4463 v25 = 65536 / v24; |
4480 v49 = v23 * v25; | 4464 v49 = dist2_x * v25; |
4481 v47 = v50 * v25; | 4465 v47 = dist2_z * v25; |
4482 v48 = (v60 - v64) * v25; | 4466 v48 = (obj2_y - obj_y) * v25; |
4483 v56 = v63; | 4467 if ( obj_x < obj2_x ) |
4484 if ( v63 < v18 ) | |
4485 { | 4468 { |
4486 v55 = v18; | 4469 v56 = obj_x; |
4470 v55 = obj2_x; | |
4487 } | 4471 } |
4488 else | 4472 else |
4489 { | 4473 { |
4490 v56 = v18; | 4474 v56 = obj2_x; |
4491 v55 = v63; | 4475 v55 = obj_x; |
4492 } | 4476 } |
4493 v54 = v64; | 4477 if ( obj_y < obj2_y ) |
4494 if ( v64 < v60 ) | |
4495 { | 4478 { |
4496 v53 = v60; | 4479 v54 = obj_y; |
4480 v53 = obj2_y; | |
4497 } | 4481 } |
4498 else | 4482 else |
4499 { | 4483 { |
4500 v54 = v60; | 4484 v54 = obj2_y; |
4501 v53 = v64; | 4485 v53 = obj_y; |
4502 } | 4486 } |
4503 v52 = v65; | 4487 if ( obj_z < obj2_z ) |
4504 if ( v65 < v17 ) | |
4505 { | 4488 { |
4506 v51 = v17; | 4489 v52 = obj_z; |
4490 v51 = obj2_z; | |
4507 } | 4491 } |
4508 else | 4492 else |
4509 { | 4493 { |
4510 v52 = v17; | 4494 v52 = obj2_z; |
4511 v51 = v65; | 4495 v51 = obj_z; |
4512 } | 4496 } |
4513 v57 = 0; | 4497 v57 = 0; |
4514 v26 = v66; | 4498 if ( v66 == obj2_sector ) |
4515 while ( 2 ) | |
4516 { | |
4517 if ( v26 == v62 ) | |
4518 return 1; | 4499 return 1; |
4519 if ( v57 >= 30 || (v27 = pIndoor->pSectors, v28 = v66, v61 = 0, pIndoor->pSectors[v66].uNumPortals <= 0) ) | 4500 //for ( v57 = 0; v57 < 30; v57++ ) |
4520 break; | 4501 if ( v57 < 30 && !(v61 = 0, pIndoor->pSectors[v66].uNumPortals <= 0) ) |
4521 while ( 1 ) | 4502 for( int v61 = 0; v61 < pIndoor->pSectors[v66].uNumPortals; v61++ ) |
4522 { | 4503 { |
4523 v29 = &pIndoor->pFaces[v27[v28].pPortals[v61]]; | 4504 v29 = &pIndoor->pFaces[pIndoor->pSectors[v66].pPortals[v61]]; |
4524 v30 = &pIndoor->pVertices[*v29->pVertexIDs]; | 4505 v30 = &pIndoor->pVertices[*v29->pVertexIDs]; |
4525 v45 = *(int *)&v30->x; | 4506 //v45 = *(int *)&v30->x; |
4526 v46 = v30->z; | 4507 //v46 = v30->z; |
4527 v31 = v29->pFacePlane_old.vNormal.z * (v46 - v65) | 4508 //v31 = v29->pFacePlane_old.vNormal.z * (v46 - obj_z) |
4528 + v29->pFacePlane_old.vNormal.y * (SHIWORD(v45) - v64) | 4509 v31 = v29->pFacePlane_old.vNormal.z * (v30->z - obj_z) |
4529 + v29->pFacePlane_old.vNormal.x * ((signed __int16)v45 - v63); | 4510 //+ v29->pFacePlane_old.vNormal.y * (SHIWORD(v45) - obj_y) |
4511 + v29->pFacePlane_old.vNormal.y * (v30->y - obj_y) | |
4512 //+ v29->pFacePlane_old.vNormal.x * ((signed __int16)v45 - obj_x); | |
4513 + v29->pFacePlane_old.vNormal.x * (v30->x - obj_x); | |
4530 if ( v66 != v29->uSectorID ) | 4514 if ( v66 != v29->uSectorID ) |
4531 v31 = -v31; | 4515 v31 = -v31; |
4532 if ( v31 >= 0 && (signed __int16)v45 != v63 && SHIWORD(v45) != v64 && v46 != v65 | 4516 //if (!( v31 >= 0 && (signed __int16)v45 != obj_x && SHIWORD(v45) != obj_y && v46 != obj_z |
4517 if (!( v31 >= 0 && v30->x != obj_x && v30->y != obj_y && v30->z != obj_z | |
4533 || v56 > v29->pBounding.x2 | 4518 || v56 > v29->pBounding.x2 |
4534 || v55 < v29->pBounding.x1 | 4519 || v55 < v29->pBounding.x1 |
4535 || v54 > v29->pBounding.y2 | 4520 || v54 > v29->pBounding.y2 |
4536 || v53 < v29->pBounding.y1 | 4521 || v53 < v29->pBounding.y1 |
4537 || v52 > v29->pBounding.z2 | 4522 || v52 > v29->pBounding.z2 |
4538 || v51 < v29->pBounding.z1 ) | 4523 || v51 < v29->pBounding.z1 ) ) |
4539 goto LABEL_54; | 4524 { |
4540 v32 = (unsigned __int64)(v49 * (signed __int64)v29->pFacePlane_old.vNormal.x) >> 16; | 4525 v32 = (unsigned __int64)(v49 * (signed __int64)v29->pFacePlane_old.vNormal.x) >> 16; |
4541 v33 = (unsigned __int64)(v47 * (signed __int64)v29->pFacePlane_old.vNormal.z) >> 16; | 4526 v33 = (unsigned __int64)(v47 * (signed __int64)v29->pFacePlane_old.vNormal.z) >> 16; |
4542 v34 = (unsigned __int64)(v48 * (signed __int64)v29->pFacePlane_old.vNormal.y) >> 16; | 4527 v34 = (unsigned __int64)(v48 * (signed __int64)v29->pFacePlane_old.vNormal.y) >> 16; |
4543 v35 = v32 + v33 + v34 == 0; | 4528 v35 = v32 + v33 + v34 == 0; |
4544 v36 = v32 + v33 + v34; | 4529 v36 = v32 + v33 + v34; |
4545 v59 = v32 + v33 + v34; | 4530 v59 = v32 + v33 + v34; |
4546 if ( v35 ) | 4531 if ( !v35 ) |
4547 goto LABEL_53; | 4532 { |
4548 v37 = v65 * v29->pFacePlane_old.vNormal.z; | 4533 v37 = obj_z * v29->pFacePlane_old.vNormal.z; |
4549 v38 = -(v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y); | 4534 v38 = -(v29->pFacePlane_old.dist + v37 + obj_x * v29->pFacePlane_old.vNormal.x + obj_y * v29->pFacePlane_old.vNormal.y); |
4550 if ( v36 <= 0 ) | 4535 if ( v36 <= 0 ^ v29->pFacePlane_old.dist + v37 + obj_x * v29->pFacePlane_old.vNormal.x + obj_y * v29->pFacePlane_old.vNormal.y <= 0) |
4551 break; | 4536 { |
4552 if ( v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y <= 0 ) | 4537 v39 = abs(-(v29->pFacePlane_old.dist |
4553 goto LABEL_49; | 4538 + v37 |
4554 LABEL_53: | 4539 + obj_x * v29->pFacePlane_old.vNormal.x |
4555 v27 = pIndoor->pSectors; | 4540 + obj_y * v29->pFacePlane_old.vNormal.y)) >> 14; |
4556 LABEL_54: | 4541 if ( v39 > abs(v36) |
4557 ++v61; | 4542 || (LODWORD(v40) = v38 << 16, HIDWORD(v40) = v38 >> 16, v58 = v40 / v59, (signed int)(v40 / v59) < 0) |
4558 if ( v61 >= v27[v28].uNumPortals ) | 4543 || !sub_4075DB( |
4559 goto LABEL_55; | 4544 obj_x + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v49) >> 16) + 32768) >> 16), |
4545 obj_y + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v48) >> 16) + 32768) >> 16), | |
4546 obj_z + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v47) >> 16) + 32768) >> 16), | |
4547 v29) ) | |
4548 { | |
4549 continue; | |
4550 } | |
4551 if ( v29->uSectorID == v66 ) | |
4552 v42 = v29->uBackSectorID; | |
4553 else | |
4554 v42 = v29->uSectorID; | |
4555 if ( v42 != v66 ) | |
4556 { | |
4557 ++v57; | |
4558 v66 = v42; | |
4559 if ( v42 == obj2_sector ) | |
4560 return 1; | |
4561 if ( v57 < 30 && pIndoor->pSectors[v66].uNumPortals > 0) | |
4562 { | |
4563 v61=-1; | |
4564 continue; | |
4565 } | |
4566 | |
4567 } | |
4568 break; | |
4569 } | |
4570 } | |
4571 } | |
4560 } | 4572 } |
4561 if ( v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y < 0 ) | 4573 if ( v66 != obj2_sector ) |
4562 goto LABEL_53; | |
4563 LABEL_49: | |
4564 v39 = abs(-(v29->pFacePlane_old.dist | |
4565 + v37 | |
4566 + v63 * v29->pFacePlane_old.vNormal.x | |
4567 + v64 * v29->pFacePlane_old.vNormal.y)) >> 14; | |
4568 if ( v39 > abs(v36) | |
4569 || (LODWORD(v40) = v38 << 16, HIDWORD(v40) = v38 >> 16, v58 = v40 / v59, (signed int)(v40 / v59) < 0) | |
4570 || !sub_4075DB( | |
4571 v63 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v49) >> 16) + 32768) >> 16), | |
4572 v64 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v48) >> 16) + 32768) >> 16), | |
4573 v65 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v47) >> 16) + 32768) >> 16), | |
4574 v29) ) | |
4575 { | |
4576 v28 = v66; | |
4577 goto LABEL_53; | |
4578 } | |
4579 if ( v29->uSectorID == v66 ) | |
4580 v42 = v29->uBackSectorID; | |
4581 else | |
4582 v42 = v29->uSectorID; | |
4583 v26 = v42; | |
4584 if ( v42 != v66 ) | |
4585 { | |
4586 ++v57; | |
4587 v66 = v42; | |
4588 continue; | |
4589 } | |
4590 break; | |
4591 } | |
4592 LABEL_55: | |
4593 if ( v66 != v62 ) | |
4594 return 0; | 4574 return 0; |
4595 return 1; | 4575 return 1; |
4596 } | 4576 } |
4597 | 4577 |
4598 //----- (004075DB) -------------------------------------------------------- | 4578 //----- (004075DB) -------------------------------------------------------- |
4619 bool result; // eax@25 | 4599 bool result; // eax@25 |
4620 int v29; // [sp+10h] [bp-Ch]@14 | 4600 int v29; // [sp+10h] [bp-Ch]@14 |
4621 signed int a3a; // [sp+24h] [bp+8h]@14 | 4601 signed int a3a; // [sp+24h] [bp+8h]@14 |
4622 int a4a; // [sp+28h] [bp+Ch]@2 | 4602 int a4a; // [sp+28h] [bp+Ch]@2 |
4623 | 4603 |
4624 __debugbreak(); | 4604 //__debugbreak(); |
4625 | 4605 |
4626 v5 = a4->uAttributes; | 4606 v5 = a4->uAttributes; |
4627 v9 = pIndoor->pVertices; | 4607 v9 = pIndoor->pVertices; |
4628 if ( v5 & FACE_XY_PLANE ) | 4608 if ( v5 & FACE_XY_PLANE ) |
4629 { | 4609 { |