Skip to content

Commit fb45587

Browse files
authored
c_m3d OK (#2317)
1 parent 0d3b4bf commit fb45587

File tree

2 files changed

+71
-60
lines changed

2 files changed

+71
-60
lines changed

configure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ def MatchingFor(*versions):
699699
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_bg_s_poly_info.cpp"),
700700
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_bg_w.cpp"),
701701
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_m2d.cpp"),
702-
Object(NonMatching, "SSystem/SComponent/c_m3d.cpp"),
702+
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_m3d.cpp"),
703703
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_m3d_g_aab.cpp"),
704704
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_m3d_g_cir.cpp", extra_cflags=['-pragma "nosyminline on"']),
705705
Object(MatchingFor("GZ2E01"), "SSystem/SComponent/c_m3d_g_cps.cpp"),

src/SSystem/SComponent/c_m3d.cpp

Lines changed: 70 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -681,42 +681,45 @@ bool cM3d_InclusionCheckPosIn3PosBox3d(const Vec* pVecA, const Vec* pVecB, const
681681
/* 80269D64-80269E18 2646A4 00B4+00 11/11 0/0 0/0 .text
682682
* cM3d_InclusionCheckPosIn3PosBox2d__Ffffffffff */
683683
static bool cM3d_InclusionCheckPosIn3PosBox2d(f32 param_1, f32 param_2, f32 param_3,
684-
f32 param_4, f32 param_5, f32 param_6,
685-
f32 param_7, f32 param_8, f32 param_9) {
686-
f32 dVar6 = param_9;
687-
f32 dVar7;
684+
f32 param_4, f32 param_5, f32 param_6,
685+
f32 param_7, f32 param_8, f32 param_9) {
686+
f32 f31;
687+
f32 f30;
688+
f32 f29;
689+
f29 = param_9;
688690
if (param_1 < param_3) {
689-
dVar7 = param_1;
691+
f31 = param_1;
692+
f30 = param_3;
690693
} else {
691-
dVar7 = param_3;
692-
param_3 = param_1;
694+
f31 = param_3;
695+
f30 = param_1;
693696
}
694697

695-
if (dVar7 > param_5) {
696-
dVar7 = param_5;
697-
} else if (param_3 < param_5) {
698-
param_3 = param_5;
698+
if (f31 > param_5) {
699+
f31 = param_5;
700+
} else if (f30 < param_5) {
701+
f30 = param_5;
699702
}
700703

701-
if (dVar7 - dVar6 > param_7 || param_3 + dVar6 < param_7) {
704+
if (f31 - f29 > param_7 || f30 + f29 < param_7) {
702705
return false;
703706
}
704707

705-
f32 f1;
706708
if (param_2 < param_4) {
707-
f1 = param_2;
709+
f31 = param_2;
710+
f30 = param_4;
708711
} else {
709-
f1 = param_4;
710-
param_4 = param_2;
712+
f31 = param_4;
713+
f30 = param_2;
711714
}
712715

713-
if (f1 > param_6) {
714-
f1 = param_6;
715-
} else if (param_4 < param_6) {
716-
param_4 = param_6;
716+
if (f31 > param_6) {
717+
f31 = param_6;
718+
} else if (f30 < param_6) {
719+
f30 = param_6;
717720
}
718721

719-
if (f1 - dVar6 > param_8 || param_4 + dVar6 < param_8)
722+
if (f31 - f29 > param_8 || f30 + f29 < param_8)
720723
{
721724
return false;
722725
}
@@ -1543,11 +1546,26 @@ bool cM3d_Cross_CylTri(cM3dGCyl const* cyl, cM3dGTri const* tri, Vec* param_2) {
15431546

15441547
/* 8026C944-8026D044 267284 0700+00 1/1 2/2 1/1 .text
15451548
* cM3d_Cross_CylLin__FPC8cM3dGCylPC8cM3dGLinP3VecP3Vec */
1546-
// NONMATCHING regalloc
15471549
int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, Vec* param_3) {
1548-
f32 f1 = 0.0f;
1549-
f32 f2 = 0.0f;
1550-
u32 uVar11 = 0;
1550+
f32 ratio;
1551+
f32 f2;
1552+
f32 fVar5;
1553+
f32 fVar2;
1554+
f32 fVar1;
1555+
f32 fVar6;
1556+
f32 fVar4;
1557+
BOOL bVar4;
1558+
BOOL bVar3;
1559+
BOOL bVar6;
1560+
BOOL bVar5;
1561+
u32 uVar11;
1562+
f32 sp28;
1563+
f32 r_sq;
1564+
int count;
1565+
1566+
ratio = 0.0f;
1567+
f2 = 0.0f;
1568+
uVar11 = 0;
15511569

15521570
if (cM3d_Cross_CylPnt(cyl, &line->GetStartP()) && cM3d_Cross_CylPnt(cyl, &line->GetEndP())) {
15531571
*param_2 = line->GetStartP();
@@ -1561,10 +1579,10 @@ int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, V
15611579
VECSubtract(&line->GetStartP(), center, &vec1);
15621580
VECSubtract(&line->GetEndP(), center, &vec2);
15631581
VECSubtract(&vec2, &vec1, &vec3);
1564-
f32 r_sq = cyl->GetR() * cyl->GetR();
1582+
r_sq = cyl->GetR() * cyl->GetR();
15651583

15661584
if (!cM3d_IsZero(vec3.y)) {
1567-
f32 ratio = -vec1.y / vec3.y;
1585+
ratio = -vec1.y / vec3.y;
15681586
if (ratio >= 0.0f && ratio <= 1.0f) {
15691587
f32 x = vec1.x + vec3.x * ratio;
15701588
f32 z = vec1.z + vec3.z * ratio;
@@ -1589,56 +1607,48 @@ int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, V
15891607
}
15901608
}
15911609

1592-
f32 fVar5 = vec3.x * vec3.x + vec3.z * vec3.z;
1593-
f32 fVar2 = (vec3.x * vec1.x + vec3.z * vec1.z) * 2.0f;
1594-
f32 fVar1 = vec1.x * vec1.x + vec1.z * vec1.z - r_sq;
1610+
bVar4 = false;
1611+
bVar3 = false;
1612+
fVar5 = vec3.x * vec3.x + vec3.z * vec3.z;
1613+
fVar2 = (vec3.x * vec1.x + vec3.z * vec1.z) * 2.0f;
1614+
fVar1 = vec1.x * vec1.x + vec1.z * vec1.z - r_sq;
15951615

1596-
BOOL bVar4, bVar3;
1597-
if (!cM3d_IsZero(fVar5 * 2.0f)) {
1598-
f32 fVar6 = fVar2 * fVar2 - fVar5 * 4.0f * fVar1;
1616+
f32 sp0C = fVar5 * 2.0f;
1617+
if (!cM3d_IsZero(sp0C)) {
1618+
fVar6 = fVar2 * fVar2 - fVar5 * 4.0f * fVar1;
15991619
if (fVar6 < 0.0f) {
16001620
return 0;
16011621
}
16021622
if (fVar6 > 0.0f) {
1603-
bVar3 = true;
1604-
bVar4 = true;
1623+
bVar4 = bVar3 = true;
16051624
} else {
16061625
bVar4 = true;
16071626
bVar3 = false;
16081627
}
1609-
f32 fVar4 = sqrtf(fVar6);
1628+
fVar4 = sqrtf(fVar6);
16101629
if (bVar4) {
1611-
f1 = (-fVar2 + fVar4) / (fVar5 * 2.0f);
1630+
ratio = (-fVar2 + fVar4) / sp0C;
16121631
}
16131632
if (bVar3) {
1614-
f2 = (-fVar2 - fVar4) / (fVar5 * 2.0f);
1633+
f2 = (-fVar2 - fVar4) / sp0C;
16151634
}
16161635
} else {
16171636
if (!cM3d_IsZero(fVar2)) {
16181637
bVar4 = true;
16191638
bVar3 = false;
1620-
f1 = -fVar1 / fVar2;
1639+
ratio = -fVar1 / fVar2;
16211640
} else {
16221641
return 0;
16231642
}
16241643
}
16251644

1626-
BOOL bVar6, bVar5;
16271645
if (bVar4 && !bVar3) {
1628-
if (0.0f > f1 || f1 > 1.0f) {
1646+
if (0.0f > ratio || ratio > 1.0f) {
16291647
return 0;
16301648
}
16311649
} else {
1632-
bool tmp = false;
1633-
if (0.0f > f1 || f1 > 1.0f) {
1634-
tmp = true;
1635-
}
1636-
bVar6 = tmp;
1637-
tmp = false;
1638-
if (0.0f > f2 || f2 > 1.0f) {
1639-
tmp = true;
1640-
}
1641-
bVar5 = tmp;
1650+
bVar6 = 0.0f > ratio || ratio > 1.0f;
1651+
bVar5 = 0.0f > f2 || f2 > 1.0f;
16421652
if (bVar6 && bVar5) {
16431653
return 0;
16441654
}
@@ -1651,14 +1661,14 @@ int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, V
16511661
}
16521662

16531663
if (bVar4) {
1654-
f32 tmp = vec1.y + f1 * vec3.y;
1655-
if (tmp < 0.0f || tmp > cyl->GetH()) {
1664+
sp28 = vec1.y + ratio * vec3.y;
1665+
if (sp28 < 0.0f || sp28 > cyl->GetH()) {
16561666
bVar4 = false;
16571667
}
16581668
}
16591669
if (bVar3) {
1660-
f32 tmp = vec1.y + f2 * vec3.y;
1661-
if (tmp < 0.0f || tmp > cyl->GetH()) {
1670+
sp28 = vec1.y + f2 * vec3.y;
1671+
if (sp28 < 0.0f || sp28 > cyl->GetH()) {
16621672
bVar3 = false;
16631673
}
16641674
}
@@ -1670,15 +1680,16 @@ int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, V
16701680
if (bVar4 && bVar3) {
16711681
Vec vec5, vec6;
16721682
VECAdd(&vec1, center, &vec5);
1673-
VECScale(&vec3, &vec6, f1);
1683+
uVar11 |= 4;
1684+
VECScale(&vec3, &vec6, ratio);
16741685
VECAdd(&vec6, &vec5, &vec[2]);
1675-
uVar11 |= 0xC;
1686+
uVar11 |= 8;
16761687
VECScale(&vec3, &vec6, f2);
16771688
VECAdd(&vec6, &vec5, &vec[3]);
16781689
} else if (bVar4) {
16791690
uVar11 |= 4;
16801691
Vec vec5, vec6;
1681-
VECScale(&vec3, &vec5, f1);
1692+
VECScale(&vec3, &vec5, ratio);
16821693
VECAdd(&vec5, &vec1, &vec6);
16831694
VECAdd(&vec6, center, &vec[2]);
16841695
} else if (bVar3) {
@@ -1689,7 +1700,7 @@ int cM3d_Cross_CylLin(cM3dGCyl const* cyl, cM3dGLin const* line, Vec* param_2, V
16891700
VECAdd(&vec6, center, &vec[2]);
16901701
}
16911702

1692-
int count = 0;
1703+
count = 0;
16931704
for (int i = 0; i < 4; i++) {
16941705
if (uVar11 & (1 << i)) {
16951706
if (count == 0) {

0 commit comments

Comments
 (0)