diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-08 12:10:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-08 12:10:05 +0200 |
| commit | a8a159ae2c18e2ce3c0f98b1cc54e36ed14cff60 (patch) | |
| tree | 81dfdf02a475a88f6f9ce3ba03daad018bbfac91 /libs/SSystem/SComponent/c_m3d.cpp | |
| parent | dea6243c35dbc373e39c3f4afcb1aba0063065f0 (diff) | |
Various Matches, J2DTextBoxEx and J2DTevs OK (#2025)
* Work on src/d/bg
* misc work
* J2dTextBoxEx OK
* J2DTevs OK
* Better return values for bool
Diffstat (limited to 'libs/SSystem/SComponent/c_m3d.cpp')
| -rw-r--r-- | libs/SSystem/SComponent/c_m3d.cpp | 116 |
1 files changed, 107 insertions, 9 deletions
diff --git a/libs/SSystem/SComponent/c_m3d.cpp b/libs/SSystem/SComponent/c_m3d.cpp index 8897f1b82d..6d3d90db1a 100644 --- a/libs/SSystem/SComponent/c_m3d.cpp +++ b/libs/SSystem/SComponent/c_m3d.cpp @@ -10,7 +10,9 @@ #include "SSystem/SComponent/c_m3d_g_lin.h" #include "SSystem/SComponent/c_m3d_g_sph.h" #include "SSystem/SComponent/c_m3d_g_tri.h" +#include "SSystem/SComponent/c_m3d_g_cps.h" #include "SSystem/SComponent/c_math.h" +#include "SSystem/SComponent/c_sxyz.h" #include "dol2asm.h" #include "dolphin/types.h" #include "global.h" @@ -611,16 +613,48 @@ bool cM3d_InclusionCheckPosIn3PosBox3d(const Vec* pVecA, const Vec* pVecB, const /* 80269D64-80269E18 2646A4 00B4+00 11/11 0/0 0/0 .text * cM3d_InclusionCheckPosIn3PosBox2d__Ffffffffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm bool cM3d_InclusionCheckPosIn3PosBox2d(f32 param_0, f32 param_1, f32 param_2, - f32 param_3, f32 param_4, f32 param_5, - f32 param_6, f32 param_7, f32 param_8) { - nofralloc -#include "asm/SSystem/SComponent/c_m3d/cM3d_InclusionCheckPosIn3PosBox2d__Ffffffffff.s" +static bool cM3d_InclusionCheckPosIn3PosBox2d(f32 param_1, f32 param_2, f32 param_3, + f32 param_4, f32 param_5, f32 param_6, + f32 param_7, f32 param_8, f32 param_9) { + f32 dVar6 = param_9; + f32 dVar7; + if (param_1 < param_3) { + dVar7 = param_1; + } else { + dVar7 = param_3; + param_3 = param_1; + } + + if (dVar7 > param_5) { + dVar7 = param_5; + } else if (param_3 < param_5) { + param_3 = param_5; + } + + if (dVar7 - dVar6 > param_7 || param_3 + dVar6 < param_7) { + return false; + } + + f32 fVar1; + if (param_2 < param_4) { + fVar1 = param_2; + } else { + fVar1 = param_4; + param_4 = param_2; + } + + if (fVar1 > param_6) { + fVar1 = param_6; + } else if (param_4 < param_6) { + param_4 = param_6; + } + + if (fVar1 - dVar6 > param_8 || param_4 + dVar6 < param_8) + { + return false; + } + return true; } -#pragma pop /* ############################################################################################## */ /* 804551AC-804551B0 0037AC 0004+00 11/11 0/0 0/0 .sdata2 @3205 */ @@ -1036,6 +1070,36 @@ asm bool cM3d_Cross_CpsCyl(cM3dGCps const& param_0, cM3dGCyl const& param_1, Vec /* 8026DAE0-8026DC3C 268420 015C+00 1/1 0/0 0/0 .text * cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRC3VecP3Vec */ +// Matches with literals +#ifdef NONMATCHING +static bool cM3d_Cross_CpsSph_CrossPos(cM3dGCps const& param_1, cM3dGSph const& param_2, + Vec const& param_3, Vec* param_4) { + Vec aVStack_70; + Vec VStack_7c; + int iVar5 = cM3d_Cross_LinSph_CrossPos(param_2, param_1, &aVStack_70, &VStack_7c); + if (iVar5 == 1) { + *param_4 = aVStack_70; + } else if (iVar5 == 2) { + f32 dVar8 = VECSquareDistance(&aVStack_70, ¶m_1.GetStartP()); + f32 dVar9 = VECSquareDistance(&VStack_7c, ¶m_1.GetStartP()); + if (dVar8 < dVar9) { + *param_4 = aVStack_70; + } else { + *param_4 = VStack_7c; + } + } else { + f32 dVar8 = param_1.GetR() + param_2.GetR(); + *param_4 = param_3; + if (cM3d_IsZero(dVar8)) { + *param_4 = param_3; + } + Vec auStack_88; + VECSubtract(¶m_3, param_2.GetCP(), &auStack_88); + VECScale(&auStack_88, &auStack_88, 0.5f); + VECAdd(param_4, &auStack_88, param_4); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1045,9 +1109,33 @@ static asm bool cM3d_Cross_CpsSph_CrossPos(cM3dGCps const& param_0, cM3dGSph con #include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRC3VecP3Vec.s" } #pragma pop +#endif /* 8026DC3C-8026DE2C 26857C 01F0+00 0/0 4/4 0/0 .text * cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphP3Vec */ +// Matches with literals +#ifdef NONMATCHING +bool cM3d_Cross_CpsSph(cM3dGCps const& param_1, cM3dGSph const& param_2, Vec* param_3) { + f32 local_38 = VECDistance(¶m_1.GetStartP(), param_2.GetCP()); + if (local_38 < param_1.GetR() + param_2.GetR()) { + cM3d_Cross_CpsSph_CrossPos(param_1, param_2, param_1.GetStartP(), param_3); + return true; + } + local_38 = VECDistance(¶m_1.GetEndP(), param_2.GetCP()); + if (local_38 < param_1.GetR() + param_2.GetR()) { + cM3d_Cross_CpsSph_CrossPos(param_1, param_2, param_1.GetEndP(), param_3); + return true; + } + Vec auStack_34; + if (cM3d_Len3dSqPntAndSegLine(¶m_1, param_2.GetCP(), &auStack_34, &local_38) != 0) { + if (sqrtf(local_38) < param_1.GetR() + param_2.GetR()) { + cM3d_Cross_CpsSph_CrossPos(param_1, param_2, auStack_34, param_3); + return true; + } + } + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1056,6 +1144,7 @@ asm bool cM3d_Cross_CpsSph(cM3dGCps const& param_0, cM3dGSph const& param_1, Vec #include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphP3Vec.s" } #pragma pop +#endif /* 8026DE2C-8026E12C 26876C 0300+00 0/0 1/1 0/0 .text * cM3d_Cross_TriTri__FRC8cM3dGTriRC8cM3dGTriP3Vec */ @@ -1096,6 +1185,14 @@ void cM3d_CalcVecAngle(const Vec& pVec, s16* pOutA, s16* pOutB) { /* 8026E570-8026E6C4 268EB0 0154+00 0/0 1/1 0/0 .text cM3d_CalcVecZAngle__FRC3VecP5csXyz */ +// Matches with literals +#ifdef NONMATCHING +void cM3d_CalcVecZAngle(Vec const& param_0, csXyz* param_1) { + param_1->x = -cM_atan2s(param_0.y, sqrtf(param_0.x * param_0.x + param_0.z * param_0.z));; + param_1->y = cM_atan2s(param_0.x, param_0.z); + param_1->z = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1104,6 +1201,7 @@ asm void cM3d_CalcVecZAngle(Vec const& param_0, csXyz* param_1) { #include "asm/SSystem/SComponent/c_m3d/cM3d_CalcVecZAngle__FRC3VecP5csXyz.s" } #pragma pop +#endif /* 8026E6C4-8026E6F0 269004 002C+00 1/1 0/0 0/0 .text cM3d_PlaneCrossLineProcWork__FfffffffPfPf */ void cM3d_PlaneCrossLineProcWork(f32 f1, f32 f2, f32 f3, f32 f4, f32 f5, f32 f6, f32 f7, f32* pF1, |
