comparison DecalBuilder.cpp @ 1075:1e38e5c049f3

DecalBuilder cleaning and some type changes
author zipi
date Sat, 25 May 2013 14:07:26 +0100
parents c45d51b3f4f4
children 9b6e252658e8
comparison
equal deleted inserted replaced
1074:d6bea22f8b53 1075:1e38e5c049f3
544 } 544 }
545 return 1; 545 return 1;
546 } 546 }
547 547
548 //----- (0049BE8A) -------------------------------------------------------- 548 //----- (0049BE8A) --------------------------------------------------------
549 bool DecalBuilder::_49BE8A(struct stru148 *a2, float a3, int a4, RenderVertexSoft *a5, unsigned int uStripType, char a7) 549 bool DecalBuilder::_49BE8A(struct stru148 *a2, Vec3_float_ *_a3, float *a4, RenderVertexSoft *a5, unsigned int uStripType, char a7)
550 { 550 {
551 bool result; // eax@1 551 bool result; // eax@1
552 RenderVertexSoft *v8; // edi@3 552 RenderVertexSoft *v8; // edi@3
553 float v9; // ebx@3 553 Vec3_float_ *v9; // ebx@3
554 char *v10; // esi@3 554 Bloodsplat *v10; // esi@3
555 float v11; // eax@5 555 float v11; // eax@5
556 float v12; // eax@6 556 float v12; // eax@6
557 double v13; // st7@13 557 double v13; // st7@13
558 double v14; // st7@19 558 double v14; // st7@19
559 int v15; // eax@20 559 short v15; // eax@20
560 int v16; // eax@22 560 int v16; // eax@22
561 int v17; // edx@24 561 int v17; // edx@24
562 DecalBuilder *v18; // eax@24 562 DecalBuilder *v18; // eax@24
563 std::string v19; // [sp-18h] [bp-54h]@12 563 std::string v19; // [sp-18h] [bp-54h]@12
564 const char *v20; // [sp-8h] [bp-44h]@12 564 const char *v20; // [sp-8h] [bp-44h]@12
572 float v28; // [sp+28h] [bp-14h]@13 572 float v28; // [sp+28h] [bp-14h]@13
573 float v29; // [sp+2Ch] [bp-10h]@7 573 float v29; // [sp+2Ch] [bp-10h]@7
574 float v30; // [sp+30h] [bp-Ch]@6 574 float v30; // [sp+30h] [bp-Ch]@6
575 float v31; // [sp+34h] [bp-8h]@6 575 float v31; // [sp+34h] [bp-8h]@6
576 bool v32; // [sp+38h] [bp-4h]@2 576 bool v32; // [sp+38h] [bp-4h]@2
577 float a3;
577 578
578 this->uNumDecals = 0; 579 this->uNumDecals = 0;
579 result = pBloodsplatContainer->std__vector_pBloodsplats_size; 580 result = pBloodsplatContainer->std__vector_pBloodsplats_size;
580 v24 = this; 581 v24 = this;
581 v23 = pBloodsplatContainer->std__vector_pBloodsplats_size; 582 v23 = pBloodsplatContainer->std__vector_pBloodsplats_size;
583 { 584 {
584 v32 = 0; 585 v32 = 0;
585 if ( (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 ) 586 if ( (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 )
586 { 587 {
587 v8 = a5; 588 v8 = a5;
588 v9 = a3; 589 v9 = _a3;
589 v10 = (char *)&pBloodsplatContainer->std__vector_pBloodsplats[0].y; 590 v10 = pBloodsplatContainer->std__vector_pBloodsplats;
590 while ( uStripType != 4 ) 591 while ( v32 < (signed int)v23)
591 { 592 {
592 if ( uStripType == 3 ) 593 if ( uStripType == 4 )
594 {
595 a3 = v8->vWorldPosition.x;
596 v11 = v8[3].vWorldPosition.x;
597 v31 = v11;
598 v30 = v8[1].vWorldPosition.y;
599 v12 = v8->vWorldPosition.y;
600 v29 = v12;
601 }
602 else if ( uStripType == 3 )
593 { 603 {
594 if ( a7 ) 604 if ( a7 )
595 { 605 {
596 a3 = v8->vWorldPosition.x; 606 a3 = v8->vWorldPosition.x;
597 v31 = v8[2].vWorldPosition.x; 607 v31 = v8[2].vWorldPosition.x;
598 v30 = v8[1].vWorldPosition.y; 608 v30 = v8[1].vWorldPosition.y;
599 v12 = v8[2].vWorldPosition.y; 609 v12 = v8[2].vWorldPosition.y;
600 goto LABEL_7; 610 v29 = v12;
601 } 611 }
602 a3 = v8[1].vWorldPosition.x; 612 else
603 v11 = v8[2].vWorldPosition.x; 613 {
604 LABEL_6: 614 a3 = v8[1].vWorldPosition.x;
605 v31 = v11; 615 v11 = v8[2].vWorldPosition.x;
606 v30 = v8[1].vWorldPosition.y; 616 v31 = v11;
607 v12 = v8->vWorldPosition.y; 617 v30 = v8[1].vWorldPosition.y;
608 LABEL_7: 618 v12 = v8->vWorldPosition.y;
609 v29 = v12; 619 v29 = v12;
610 goto LABEL_13; 620 }
611 } 621 }
612 MessageBoxW(nullptr, L"Uknown strip type detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:434", 0); 622 else
613 LABEL_13: 623 MessageBoxW(nullptr, L"Uknown strip type detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:434", 0);
614 v21 = uStripType; 624 v21 = uStripType;
615 v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType); 625 v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType);
616 v21 = uStripType; 626 v21 = uStripType;
617 v28 = v13; 627 v28 = v13;
618 v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(v8, uStripType); 628 v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(v8, uStripType);
619 if ( a3 - *((float *)v10 + 2) < *((float *)v10 - 1) ) 629 if ( a3 - v10->radius < v10->x &&
630 v31 + v10->radius > v10->x &&
631 v30 - v10->radius < v10->y &&
632 v29 + v10->radius > v10->y &&
633 v28 - v10->radius < v10->z &&
634 v26 + v10->radius > v10->z )
620 { 635 {
621 if ( v31 + *((float *)v10 + 2) > *((float *)v10 - 1) ) 636 Vec3_float_::NegDot(&v8->vWorldPosition, v9, a4);
622 { 637 v26 = v9->y * v10->y
623 if ( v30 - *((float *)v10 + 2) < *(float *)v10 ) 638 + v9->z * v10->z
624 { 639 + v9->x * v10->x
625 if ( v29 + *((float *)v10 + 2) > *(float *)v10 ) 640 + *a4;
626 { 641 v22 = v26 + 6.7553994e15;
627 if ( v28 - *((float *)v10 + 2) < *((float *)v10 + 1) ) 642 v25 = LODWORD(v22);
628 { 643 v14 = (double)SLODWORD(v22);
629 if ( v26 + *((float *)v10 + 2) > *((float *)v10 + 1) ) 644 v28 = v14;
630 { 645 if ( v14 <= v10->radius )
631 Vec3_float_::NegDot(&v8->vWorldPosition, (Vec3_float_ *)LODWORD(v9), (float *)a4); 646 {
632 v26 = *(float *)(LODWORD(v9) + 4) * *(float *)v10 647 v15 = a2->flags;
633 + *(float *)(LODWORD(v9) + 8) * *((float *)v10 + 1) 648 if ( v15 & 2 || BYTE1(v15) & 1 )
634 + *(unsigned int *)LODWORD(v9) * *((float *)v10 - 1) 649 {
635 + *(float *)a4; 650 v16 = v10->field_1C;
636 v22 = v26 + 6.7553994e15; 651 if ( !(v16 & 1) )
637 v25 = LODWORD(v22); 652 {
638 v14 = (double)SLODWORD(v22); 653 LOBYTE(v16) = v16 | 1;
639 v28 = v14; 654 v10->field_1C = v16;
640 if ( v14 <= *((float *)v10 + 2) ) 655 v10->field_20 = pEventTimer->Time();
641 { 656 }
642 v15 = *(int *)&a2->flags; 657 }
643 if ( v15 & 2 || BYTE1(v15) & 1 ) 658 v17 = v32;
644 { 659 v10->dot_dist = LODWORD(v28);
645 v16 = *((int *)v10 + 5); 660 v18 = v24;
646 if ( !(v16 & 1) ) 661 v24->std__vector_30B00C[v24->uNumDecals] = v17;
647 { 662 ++v18->uNumDecals;
648 LOBYTE(v16) = v16 | 1; 663 }
649 *((int *)v10 + 5) = v16;
650 *((_QWORD *)v10 + 3) = pEventTimer->Time();
651 }
652 }
653 v17 = v32;
654 *((int *)v10 + 3) = LODWORD(v28);
655 v18 = v24;
656 v24->std__vector_30B00C[v24->uNumDecals] = v17;
657 ++v18->uNumDecals;
658 }
659 }
660 }
661 }
662 }
663 }
664 } 664 }
665 ++v32; 665 ++v32;
666 v10 += 40; 666 ++v10;
667 result = v32; 667 result = v32;
668 if ( v32 >= (signed int)v23 )
669 goto LABEL_26;
670 } 668 }
671 a3 = v8->vWorldPosition.x; 669 }
672 v11 = v8[3].vWorldPosition.x; 670 }
673 goto LABEL_6;
674 }
675 }
676 LABEL_26:
677 LOBYTE(result) = 1; 671 LOBYTE(result) = 1;
678 return result; 672 return result;
679 } 673 }
680 674
681 //----- (0049C095) -------------------------------------------------------- 675 //----- (0049C095) --------------------------------------------------------
785 } 779 }
786 780
787 //----- (0049C550) -------------------------------------------------------- 781 //----- (0049C550) --------------------------------------------------------
788 void DecalBuilder::DrawDecalDebugOutlines() 782 void DecalBuilder::DrawDecalDebugOutlines()
789 { 783 {
790 DecalBuilder *v1; // esi@1 784 for(int i = 0; i < std__vector_pDecals_size; i++)
791 signed int v2; // ebx@1 785 pGame->pIndoorCameraD3D->debug_outline_sw(std__vector_pDecals[i].pVertices, std__vector_pDecals[i].uNumVertices, 0xC86400u, 0.0);
792 RenderVertexSoft *v3; // edi@2
793
794 v1 = this;
795 v2 = 0;
796 if ( (signed int)this->std__vector_pDecals_size > 0 )
797 {
798 v3 = this->std__vector_pDecals[0].pVertices;
799 do
800 {
801 pGame->pIndoorCameraD3D->debug_outline_sw(v3, *((int *)v3 - 1), 0xC86400u, 0.0);
802 ++v2;
803 v3 = (RenderVertexSoft *)((char *)v3 + 3104);
804 }
805 while ( v2 < (signed int)v1->std__vector_pDecals_size );
806 }
807 } 786 }
808 787
809 //----- (0040E4C2) -------------------------------------------------------- 788 //----- (0040E4C2) --------------------------------------------------------
810 void Decal::Decal_base_ctor() 789 void Decal::Decal_base_ctor()
811 { 790 {