Various Matches, J2DTextBoxEx and J2DTevs OK (#2025)

* Work on src/d/bg

* misc work

* J2dTextBoxEx OK

* J2DTevs OK

* Better return values for bool
This commit is contained in:
hatal175
2024-01-08 12:10:05 +02:00
committed by GitHub
parent dea6243c35
commit a8a159ae2c
31 changed files with 328 additions and 1386 deletions
+107 -9
View File
@@ -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, &param_1.GetStartP());
f32 dVar9 = VECSquareDistance(&VStack_7c, &param_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(&param_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(&param_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(&param_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(&param_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,