comparison Outdoor.cpp @ 2094:dbd8515924da

m
author Ritor1
date Thu, 12 Dec 2013 21:42:18 +0600
parents 48b790721bdc
children 577c081b8019
comparison
equal deleted inserted replaced
2084:48b790721bdc 2094:dbd8515924da
3661 signed int v44; // edx@184 3661 signed int v44; // edx@184
3662 int v45; // ecx@200 3662 int v45; // ecx@200
3663 BSPModel *pModel; // eax@203 3663 BSPModel *pModel; // eax@203
3664 ODMFace *pODMFace; // esi@203 3664 ODMFace *pODMFace; // esi@203
3665 int v48; // eax@203 3665 int v48; // eax@203
3666 char v49; // zf@203
3667 char v50; // sf@203
3668 unsigned __int8 v51; // of@203
3669 int v52; // eax@203
3670 BSPModel *v54; // eax@215 3666 BSPModel *v54; // eax@215
3671 int v55; // eax@217 3667 int v55; // eax@217
3672 signed int v56; // ebx@228
3673 int v57; // eax@228
3674 BSPModel *v58; // eax@228 3668 BSPModel *v58; // eax@228
3675 unsigned __int64 v59; // qax@228 3669 unsigned __int64 v59; // qax@228
3676 BSPModel *v60; // eax@228 3670 BSPModel *v60; // eax@228
3677 unsigned __int64 v61; // qax@228 3671 unsigned __int64 v61; // qax@228
3678 int v62; // eax@241 3672 int v62; // eax@241
3838 v103 = *(short *)(v7->pFacePlane.vNormal.x + 308 * v6 + 292); 3832 v103 = *(short *)(v7->pFacePlane.vNormal.x + 308 * v6 + 292);
3839 }*/ 3833 }*/
3840 if ( BYTE3(face[v6].uAttributes) & 4 ) 3834 if ( BYTE3(face[v6].uAttributes) & 4 )
3841 { 3835 {
3842 pParty->floor_face_pid = PID(OBJECT_BModel, bmodel_standing_on_pid); 3836 pParty->floor_face_pid = PID(OBJECT_BModel, bmodel_standing_on_pid);
3843 v103 = face[v6].sCogTriggeredID; 3837 v103 = face[v6].sCogTriggeredID; //
3844 } 3838 }
3845 } 3839 }
3846 } 3840 }
3847 } 3841 }
3848 pParty->floor_face_pid = PID(OBJECT_BModel, bmodel_standing_on_pid); 3842 pParty->floor_face_pid = PID(OBJECT_BModel, bmodel_standing_on_pid);
4297 if ( !v97 && !v110 && !bmodel_standing_on_pid ) 4291 if ( !v97 && !v110 && !bmodel_standing_on_pid )
4298 is_not_on_bmodel = true; 4292 is_not_on_bmodel = true;
4299 v43 = 1; 4293 v43 = 1;
4300 v44 = 1; 4294 v44 = 1;
4301 if ( bUnderwater || !is_not_on_bmodel ) 4295 if ( bUnderwater || !is_not_on_bmodel )
4302 { 4296 {
4303 pX = _angle_x; 4297 pX = _angle_x;
4304 if ( v43 ) 4298 if ( v43 )
4305 pY = _angle_y; 4299 pY = _angle_y;
4306 } 4300 }
4307 else 4301 else
4308 { 4302 {
4309 if ( pModel && v129 > pZ ) 4303 if ( pModel && v129 > pZ )
4310 v44 = 0; 4304 v44 = 0;
4311 if ( v118 && v119 > pZ ) 4305 if ( v118 && v119 > pZ )
4312 v43 = 0; 4306 v43 = 0;
4313 if ( v44 ) 4307 if ( v44 )
4314 { 4308 {
4315 pX = _angle_x; 4309 pX = _angle_x;
4316 if ( v43 ) 4310 if ( v43 )
4317 pY = _angle_y; 4311 pY = _angle_y;
4318 } 4312 }
4319 else if ( v43 ) 4313 else if ( v43 )
4320 pY = _angle_y; 4314 pY = _angle_y;
4321 else 4315 else
4322 { 4316 {
4323 pModel = (BSPModel *)ODM_GetFloorLevel(_angle_x, _angle_y, v40, pParty->uPartyHeight, &is_on_water, &bmodel_standing_on_pid, 0); 4317 pModel = (BSPModel *)ODM_GetFloorLevel(_angle_x, _angle_y, v40, pParty->uPartyHeight, &is_on_water, &bmodel_standing_on_pid, 0);
4324 if ( IsTerrainSlopeTooHigh(_angle_x, _angle_y) && (signed int)pModel <= pZ ) 4318 if ( IsTerrainSlopeTooHigh(_angle_x, _angle_y) && (signed int)pModel <= pZ )
4325 { 4319 {
4326 v43 = 1; 4320 v43 = 1;
4327 pX = _angle_x; 4321 pX = _angle_x;
4328 if ( v43 ) 4322 if ( v43 )
4329 pY = _angle_y; 4323 pY = _angle_y;
4330 } 4324 }
4331 } 4325 }
4332 } 4326 }
4333 if ( stru_721530.field_7C >= stru_721530.field_6C ) 4327 if ( stru_721530.field_7C >= stru_721530.field_6C )
4334 { 4328 {
4335 if ( !is_not_on_bmodel ) 4329 if ( !is_not_on_bmodel )
4336 { 4330 {
4337 pX = stru_721530.normal2.x; 4331 pX = stru_721530.normal2.x;
4349 { 4343 {
4350 if (pParty->Invisible()) 4344 if (pParty->Invisible())
4351 pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].Reset(); 4345 pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].Reset();
4352 4346
4353 viewparams->bRedrawGameUI = true; 4347 viewparams->bRedrawGameUI = true;
4354 v2 = (unsigned __int64)(58500i64 * v2) >> 16; 4348 v2 = (unsigned __int64)(58500i64 * v2) >> 16;
4355 pModel = (BSPModel *)58500; 4349 pModel = (BSPModel *)58500;
4356 v128 = (unsigned __int64)(58500i64 * v128) >> 16; 4350 v128 = (unsigned __int64)(58500i64 * v128) >> 16;
4357 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4351 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4358 ++v126; 4352 ++v126;
4359 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4353 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4360 continue; 4354 continue;
4361 } 4355 }
4362 if ( PID_TYPE(stru_721530.uFaceID) == OBJECT_Decoration) 4356 if ( PID_TYPE(stru_721530.uFaceID) == OBJECT_Decoration)
4363 { 4357 {
4364 v56 = integer_sqrt(v2 * v2 + v128 * v128); 4358 v118 = integer_sqrt(v2 * v2 + v128 * v128);
4365 v118 = v56; 4359 v129 = stru_5C6E00->Atan2(_angle_x - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.x,
4366 v57 = stru_5C6E00->Atan2(_angle_x - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.x,
4367 _angle_y - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.y); 4360 _angle_y - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.y);
4368 v129 = v57; 4361 v59 = (signed int)stru_5C6E00->Cos(v129) * (signed __int64)v118;
4369 v58 = (BSPModel *)stru_5C6E00->Cos(v57);
4370 pModel = v58;
4371 v59 = (signed int)v58 * (signed __int64)v56;
4372 v122 = v59 >> 16; 4362 v122 = v59 >> 16;
4373 v2 = v59 >> 16; 4363 v2 = v59 >> 16;
4374 v60 = (BSPModel *)stru_5C6E00->Sin(v129); 4364 v61 = (signed int)stru_5C6E00->Sin(v129) * (signed __int64)v118;
4375 pModel = v60;
4376 v61 = (signed int)v60 * (signed __int64)v118;
4377 v122 = v61 >> 16; 4365 v122 = v61 >> 16;
4378 v128 = v61 >> 16; 4366 v128 = v61 >> 16;
4379 } 4367 }
4380 else 4368 else
4381 { 4369 {
4384 pParty->bFlying = false; 4372 pParty->bFlying = false;
4385 pModel = &pOutdoor->pBModels[(signed int)stru_721530.uFaceID >> 9]; 4373 pModel = &pOutdoor->pBModels[(signed int)stru_721530.uFaceID >> 9];
4386 //v127 = v46; 4374 //v127 = v46;
4387 pODMFace = &pModel->pFaces[((signed int)stru_721530.uFaceID >> 3) & 0x3F]; 4375 pODMFace = &pModel->pFaces[((signed int)stru_721530.uFaceID >> 3) & 0x3F];
4388 v48 = pODMFace->pBoundingBox.z2 - pODMFace->pBoundingBox.z1; 4376 v48 = pODMFace->pBoundingBox.z2 - pODMFace->pBoundingBox.z1;
4389 v51 = __OFSUB__(v48, 32); 4377 //v51 = __OFSUB__(v48, 32);
4390 v49 = v48 == 32; 4378 //v49 = v48 == 32;
4391 v50 = v48 - 32 < 0; 4379 //v50 = v48 - 32 < 0;
4392 v52 = pODMFace->pFacePlane.vNormal.z; 4380 //v52 = pODMFace->pFacePlane.vNormal.z;
4393 v129 = (unsigned __int8)(v50 ^ v51 | v49); 4381 v129 = v48 <= 32;
4394 v119 = v52 < 46378; 4382 v119 = pODMFace->pFacePlane.vNormal.z < 46378;
4395 if ( bUnderwater == 1 ) 4383 if ( bUnderwater == 1 )
4396 v119 = 0; 4384 v119 = 0;
4397 if ( pODMFace->uPolygonType == POLYGON_Floor ) 4385 if ( pODMFace->uPolygonType == POLYGON_Floor )
4398 { 4386 {
4399 if ( pParty->uFallSpeed < 0 ) 4387 if ( pParty->uFallSpeed < 0 )
4405 *(float *)&v128 = 0.0; 4393 *(float *)&v128 = 0.0;
4406 } 4394 }
4407 if ( pParty->floor_face_pid != v45 && (pODMFace->uAttributes & FACE_PRESSURE_PLATE)) 4395 if ( pParty->floor_face_pid != v45 && (pODMFace->uAttributes & FACE_PRESSURE_PLATE))
4408 { 4396 {
4409 pParty->floor_face_pid = v45; 4397 pParty->floor_face_pid = v45;
4410 v103 = pODMFace->sCogTriggeredID; 4398 v103 = pODMFace->sCogTriggeredID; //
4411 } 4399 }
4412 v2 = (unsigned __int64)(58500i64 * v2) >> 16; 4400 v2 = (unsigned __int64)(58500i64 * v2) >> 16;
4413 pModel = (BSPModel *)58500; 4401 pModel = (BSPModel *)58500;
4414 v128 = (unsigned __int64)(58500i64 * v128) >> 16; 4402 v128 = (unsigned __int64)(58500i64 * v128) >> 16;
4415 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4403 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4416 ++v126; 4404 //++v126;
4417 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4405 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4418 continue; 4406 continue;
4419 } 4407 }
4420 if ( !v129 && (pODMFace->uPolygonType != POLYGON_InBetweenFloorAndWall || v119) )// упёрся в столб 4408 if ( !v129 && (pODMFace->uPolygonType != POLYGON_InBetweenFloorAndWall || v119) )// упёрся в столб
4421 { 4409 {
4422 v118 = abs(v128 * pODMFace->pFacePlane.vNormal.y + pParty->uFallSpeed * v52 + v2 * pODMFace->pFacePlane.vNormal.x) >> 16; 4410 v118 = abs(v128 * pODMFace->pFacePlane.vNormal.y
4411 + pParty->uFallSpeed * pODMFace->pFacePlane.vNormal.z
4412 + v2 * pODMFace->pFacePlane.vNormal.x) >> 16;
4423 if ((stru_721530.speed >> 3) > v118 ) 4413 if ((stru_721530.speed >> 3) > v118 )
4424 v118 = stru_721530.speed >> 3; 4414 v118 = stru_721530.speed >> 3;
4425 v129 = (unsigned __int64)(v118 * (signed __int64)pODMFace->pFacePlane.vNormal.x) >> 16; 4415 v2 += (unsigned __int64)(v118 * (signed __int64)pODMFace->pFacePlane.vNormal.x) >> 16;
4426 _walk_speed = (unsigned __int64)(v118 * (signed __int64)pODMFace->pFacePlane.vNormal.y) >> 16; 4416 v128 += (unsigned __int64)(v118 * (signed __int64)pODMFace->pFacePlane.vNormal.y) >> 16;
4427 v54 = 0; 4417 v54 = 0;
4428 if ( !v119 ) 4418 if ( !v119 )
4429 { 4419 {
4430 pModel = (BSPModel *)pODMFace->pFacePlane.vNormal.z; 4420 //pModel = (BSPModel *)pODMFace->pFacePlane.vNormal.z;
4431 pModel = (BSPModel *)((unsigned __int64)(v118 * (signed __int64)(signed int)pModel) >> 16); 4421 pParty->uFallSpeed += (unsigned __int64)(v118 * (signed __int64)(signed int)pODMFace->pFacePlane.vNormal.z) >> 16;
4432 v54 = pModel; 4422 //v54 = pModel;
4433 } 4423 }
4434 pParty->uFallSpeed += (int)v54; 4424 //pParty->uFallSpeed += (int)v54;
4435 v128 += _walk_speed; 4425 //v128 += _walk_speed;
4436 v2 += v129; 4426 //v2 += v129;
4437 v55 = stru_721530.prolly_normal_d 4427 v55 = stru_721530.prolly_normal_d
4438 - ((signed int)(pODMFace->pFacePlane.dist 4428 - ((signed int)(pODMFace->pFacePlane.dist
4439 + v122 * pODMFace->pFacePlane.vNormal.z 4429 + v122 * pODMFace->pFacePlane.vNormal.z
4440 + _angle_y * pODMFace->pFacePlane.vNormal.y 4430 + _angle_y * pODMFace->pFacePlane.vNormal.y
4441 + _angle_x * pODMFace->pFacePlane.vNormal.x) >> 16); 4431 + _angle_x * pODMFace->pFacePlane.vNormal.x) >> 16);
4444 pX = _angle_x + (pODMFace->pFacePlane.vNormal.x * v55 >> 16); 4434 pX = _angle_x + (pODMFace->pFacePlane.vNormal.x * v55 >> 16);
4445 pY = _angle_y + (pODMFace->pFacePlane.vNormal.y * v55 >> 16); 4435 pY = _angle_y + (pODMFace->pFacePlane.vNormal.y * v55 >> 16);
4446 if ( !v119 ) 4436 if ( !v119 )
4447 pZ = v122 + (pODMFace->pFacePlane.vNormal.z * v55 >> 16); 4437 pZ = v122 + (pODMFace->pFacePlane.vNormal.z * v55 >> 16);
4448 } 4438 }
4449 v45 = stru_721530.uFaceID; 4439 //v45 = stru_721530.uFaceID;
4450 if ( pParty->floor_face_pid != v45 && BYTE3(pODMFace->uAttributes) & 4 ) 4440 if ( pParty->floor_face_pid != stru_721530.uFaceID && BYTE3(pODMFace->uAttributes) & 4 )
4451 { 4441 {
4452 pParty->floor_face_pid = v45; 4442 pParty->floor_face_pid = stru_721530.uFaceID;
4453 v103 = pODMFace->sCogTriggeredID; 4443 v103 = pODMFace->sCogTriggeredID; //
4454 } 4444 }
4455 v2 = (unsigned __int64)(58500i64 * v2) >> 16; 4445 v2 = (unsigned __int64)(58500i64 * v2) >> 16;
4456 pModel = (BSPModel *)58500; 4446 pModel = (BSPModel *)58500;
4457 v128 = (unsigned __int64)(58500i64 * v128) >> 16; 4447 v128 = (unsigned __int64)(58500i64 * v128) >> 16;
4458 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4448 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4459 ++v126; 4449 //++v126;
4460 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4450 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4461 continue; 4451 continue;
4462 } 4452 }
4463 v118 = abs(v128 * pODMFace->pFacePlane.vNormal.y + pParty->uFallSpeed * v52 + v2 * pODMFace->pFacePlane.vNormal.x) >> 16; 4453 v118 = abs(v128 * pODMFace->pFacePlane.vNormal.y
4454 + pParty->uFallSpeed * pODMFace->pFacePlane.vNormal.z + v2 * pODMFace->pFacePlane.vNormal.x) >> 16;
4464 if ((stru_721530.speed >> 3) > v118 ) 4455 if ((stru_721530.speed >> 3) > v118 )
4465 v118 = stru_721530.speed >> 3; 4456 v118 = stru_721530.speed >> 3;
4466 v122 = pODMFace->pFacePlane.vNormal.x; 4457 //v122 = pODMFace->pFacePlane.vNormal.x;
4467 v122 = (unsigned __int64)(v118 * (signed __int64)(signed int)v122) >> 16; 4458 v2 += (unsigned __int64)(v118 * (signed __int64)(signed int)pODMFace->pFacePlane.vNormal.x) >> 16;
4468 pModel = (BSPModel *)pODMFace->pFacePlane.vNormal.y; 4459 //pModel = (BSPModel *)pODMFace->pFacePlane.vNormal.y;
4469 pModel = (BSPModel *)((unsigned __int64)(v118 * (signed __int64)(signed int)pModel) >> 16); 4460 v128 += (unsigned __int64)(v118 * (signed __int64)(signed int)pODMFace->pFacePlane.vNormal.y) >> 16;
4470 v129 = pODMFace->pFacePlane.vNormal.z; 4461 //v129 = pODMFace->pFacePlane.vNormal.z;
4471 v129 = (unsigned __int64)(v118 * (signed __int64)v129) >> 16; 4462 pParty->uFallSpeed += (unsigned __int64)(v118 * (signed __int64)pODMFace->pFacePlane.vNormal.z) >> 16;
4472 pParty->uFallSpeed += v129; 4463 //pParty->uFallSpeed += v129;
4473 v2 += v122; 4464 //v2 += v122;
4474 v128 += (int)pModel; 4465 //v128 += (int)pModel;
4475 if ( v2 * v2 + v128 * v128 >= 400 ) 4466 if ( v2 * v2 + v128 * v128 >= 400 )
4476 { 4467 {
4477 v45 = stru_721530.uFaceID; 4468 //v45 = stru_721530.uFaceID;
4478 if ( pParty->floor_face_pid != v45 && BYTE3(pODMFace->uAttributes) & 4 ) 4469 if ( pParty->floor_face_pid != stru_721530.uFaceID && BYTE3(pODMFace->uAttributes) & 4 )
4479 { 4470 {
4480 pParty->floor_face_pid = v45; 4471 pParty->floor_face_pid = stru_721530.uFaceID;
4481 v103 = pODMFace->sCogTriggeredID; 4472 v103 = pODMFace->sCogTriggeredID; //
4482 } 4473 }
4483 v2 = (unsigned __int64)(58500i64 * v2) >> 16; 4474 v2 = (unsigned __int64)(58500i64 * v2) >> 16;
4484 pModel = (BSPModel *)58500; 4475 pModel = (BSPModel *)58500;
4485 v128 = (unsigned __int64)(58500i64 * v128) >> 16; 4476 v128 = (unsigned __int64)(58500i64 * v128) >> 16;
4486 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4477 v122 = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4487 ++v126; 4478 //++v126;
4488 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16; 4479 pParty->uFallSpeed = (unsigned __int64)(58500i64 * pParty->uFallSpeed) >> 16;
4489 continue; 4480 continue;
4490 } 4481 }
4491 v2 = 0; 4482 v2 = 0;
4492 pParty->uFallSpeed = 0; 4483 pParty->uFallSpeed = 0;
4493 *(float *)&v128 = 0.0; 4484 *(float *)&v128 = 0.0;
4494 } 4485 }
4495 } 4486 }
4573 { 4564 {
4574 v73 = 8160; 4565 v73 = 8160;
4575 pParty->uFallStartY = 8160; 4566 pParty->uFallStartY = 8160;
4576 pParty->vPosition.z = 8160; 4567 pParty->vPosition.z = 8160;
4577 } 4568 }
4578 if ( !v103 4569 if ( !v103 //
4579 || (EventProcessor(v103, 0, 1), pParty->vPosition.x == v71) 4570 || (EventProcessor(v103, 0, 1), pParty->vPosition.x == v71)
4580 && pParty->vPosition.y == v72 4571 && pParty->vPosition.y == v72
4581 && (v73 = pParty->vPosition.z, pParty->vPosition.z == v70) ) 4572 && (v73 = pParty->vPosition.z, pParty->vPosition.z == v70) )
4582 { 4573 {
4583 if ( v73 < v111 ) 4574 if ( v73 < v111 )
4691 pTerrainHeight = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.y, &v110, 1); 4682 pTerrainHeight = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.y, &v110, 1);
4692 if ( pParty->vPosition.z <= pTerrainHeight + 1 )//положение группы всегда +1 4683 if ( pParty->vPosition.z <= pTerrainHeight + 1 )//положение группы всегда +1
4693 pParty->uFlags |= PARTY_FLAGS_1_WATER_DAMAGE; 4684 pParty->uFlags |= PARTY_FLAGS_1_WATER_DAMAGE;
4694 } 4685 }
4695 4686
4696 if ( !v103 4687 if ( !v103//
4697 || (EventProcessor(v103, 0, 1), pParty->vPosition.x == pX) 4688 || (EventProcessor(v103, 0, 1), pParty->vPosition.x == pX)
4698 && pParty->vPosition.y == pY 4689 && pParty->vPosition.y == pY
4699 && (v82 = pParty->vPosition.z, pParty->vPosition.z == v81) ) 4690 && (v82 = pParty->vPosition.z, pParty->vPosition.z == v81) )
4700 { 4691 {
4701 if ( v82 < v111 ) 4692 if ( v82 < v111 )