tp/libs/SSystem/SComponent/c_m3d.cpp

1237 lines
48 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: c_m3d
//
#include "SSystem/SComponent/c_m3d.h"
#include "SSystem/SComponent/c_m3d_g_aab.h"
#include "SSystem/SComponent/c_m3d_g_cps.h"
#include "SSystem/SComponent/c_m3d_g_cyl.h"
#include "SSystem/SComponent/c_m3d_g_lin.h"
#include "SSystem/SComponent/c_m3d_g_pla.h"
#include "SSystem/SComponent/c_m3d_g_sph.h"
#include "SSystem/SComponent/c_m3d_g_tri.h"
#include "SSystem/SComponent/c_math.h"
#include "SSystem/SComponent/c_xyz.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "msl_c/math.h"
//
// Forward References:
//
extern "C" static void cM3d_InDivPos1__FPC3VecPC3VecfP3Vec();
extern "C" void cM3d_InDivPos2__FPC3VecPC3VecfP3Vec();
extern "C" void cM3d_Len2dSq__Fffff();
extern "C" void cM3d_Len2dSqPntAndSegLine__FffffffPfPfPf();
extern "C" void cM3d_Len3dSqPntAndSegLine__FPC8cM3dGLinPC3VecP3VecPf();
extern "C" void cM3d_SignedLenPlaAndPos__FPC8cM3dGPlaPC3Vec();
extern "C" void cM3d_VectorProduct2d__Fffffff();
extern "C" void cM3d_VectorProduct__FPC4cXyzPC4cXyzPC4cXyzP4cXyz();
extern "C" void cM3d_CalcPla__FPC3VecPC3VecPC3VecP3VecPf();
extern "C" void cM3d_Cross_AabAab__FPC8cM3dGAabPC8cM3dGAab();
extern "C" void cM3d_Cross_AabCyl__FPC8cM3dGAabPC8cM3dGCyl();
extern "C" void cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph();
extern "C" static void cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf();
extern "C" static void cM3d_CrossInfLineVsInfPlane_proc__FffPC3VecPC3VecP3Vec();
extern "C" void cM3d_Cross_LinPla__FPC8cM3dGLinPC8cM3dGPlaP3Vecbb();
extern "C" void cM3d_Cross_MinMaxBoxLine__FPC3VecPC3VecPC3VecPC3Vec();
extern "C" static void cM3d_InclusionCheckPosIn3PosBox3d__FPC3VecPC3VecPC3VecPC3Vecf();
extern "C" static void cM3d_InclusionCheckPosIn3PosBox2d__Ffffffffff();
extern "C" static void cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vecf();
extern "C" static void cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vec();
extern "C" static void cM3d_CrossX_LinTri_proc__FPC8cM3dGTriPC3Vec();
extern "C" void cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vec();
extern "C" static void cM3d_CrossY_LinTri_proc__FPC8cM3dGTriPC3Vec();
extern "C" void cM3d_CrossY_Tri__FRC3VecRC3VecRC3VecRC8cM3dGPlaPC3Vec();
extern "C" void cM3d_CrossY_Tri_Front__FRC3VecRC3VecRC3VecPC3Vec();
extern "C" static void cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPf();
extern "C" static void cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vecf();
extern "C" static void cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPC10cM3d_RangePf();
extern "C" static void cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vecf();
extern "C" static void cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vec();
extern "C" static void cM3d_CrossZ_LinTri_proc__FPC8cM3dGTriPC3Vec();
extern "C" void cM3d_Cross_LinTri__FPC8cM3dGLinPC8cM3dGTriP3Vecbb();
extern "C" static void cM3d_Cross_LinTri_Easy__FPC8cM3dGTriPC3Vec();
extern "C" static void cM3d_Cross_SphPnt__FPC8cM3dGSphPC3Vec();
extern "C" void cM3d_Cross_LinSph__FPC8cM3dGLinPC8cM3dGSphP3Vec();
extern "C" void cM3d_Cross_LinSph_CrossPos__FRC8cM3dGSphRC8cM3dGLinP3VecP3Vec();
extern "C" void cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphPf();
extern "C" void cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphP3VecPf();
extern "C" void cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPf();
extern "C" static void cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPfPf();
extern "C" void cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphP3Vec();
extern "C" static void cM3d_CalcSphVsTriCrossPoint__FPC8cM3dGSphPC8cM3dGTriP3Vec();
extern "C" void cM3d_Cross_SphTri__FPC8cM3dGSphPC8cM3dGTriP3Vec();
extern "C" void cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylPf();
extern "C" void cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylP3Vec();
extern "C" void cM3d_Cross_CylTri__FPC8cM3dGCylPC8cM3dGTriP3Vec();
extern "C" void cM3d_Cross_CylLin__FPC8cM3dGCylPC8cM3dGLinP3VecP3Vec();
extern "C" static void cM3d_Cross_CylPntPnt__FPC8cM3dGCylPC3VecPC3VecP3VecP3Vec();
extern "C" static void cM3d_Cross_CylPnt__FPC8cM3dGCylPC3Vec();
extern "C" void cM3d_Cross_CpsCps__FRC8cM3dGCpsRC8cM3dGCpsP3Vec();
extern "C" void cM3d_Cross_CpsCyl__FRC8cM3dGCpsRC8cM3dGCylP3Vec();
extern "C" static void cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRC3VecP3Vec();
extern "C" void cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphP3Vec();
extern "C" void cM3d_Cross_TriTri__FRC8cM3dGTriRC8cM3dGTriP3Vec();
extern "C" void cM3d_Cross_CpsTri__FRC8cM3dGCps8cM3dGTriP3Vec();
extern "C" void cM3d_CalcVecAngle__FRC3VecPsPs();
extern "C" void cM3d_CalcVecZAngle__FRC3VecP5csXyz();
extern "C" static void cM3d_PlaneCrossLineProcWork__FfffffffPfPf();
extern "C" static void cM3d_2PlaneCrossLine__FRC8cM3dGPlaRC8cM3dGPlaP8cM3dGLin();
extern "C" void cM3d_3PlaneCrossPos__FRC8cM3dGPlaRC8cM3dGPlaRC8cM3dGPlaP3Vec();
extern "C" void cM3d_lineVsPosSuisenCross__FPC8cM3dGLinPC3VecP3Vec();
extern "C" void cM3d_lineVsPosSuisenCross__FRC3VecRC3VecRC3VecP3Vec();
extern "C" void cM3d_2PlaneLinePosNearPos__FRC8cM3dGPlaRC8cM3dGPlaPC3VecP3Vec();
extern "C" void cM3d_CrawVec__FRC3VecRC3VecP3Vec();
extern "C" void __sinit_c_m3d_cpp();
//
// External References:
//
extern "C" void cM_atan2s__Fff();
extern "C" void __ct__8cM3dGLinFRC4cXyzRC4cXyz();
extern "C" void SetStartEnd__8cM3dGLinFRC3VecRC3Vec();
extern "C" void CalcPos__8cM3dGLinCFP3Vecf();
extern "C" void SetC__8cM3dGSphFRC4cXyz();
extern "C" void SetR__8cM3dGSphFf();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__8cM3dGPla[3];
extern "C" extern void* __vt__8cM3dGLin[3];
extern "C" extern void* __vt__8cM3dGSph[3];
//
// Declarations:
//
f32 G_CM3D_F_ABS_MIN = 32 * __float_epsilon[0];
/* 80268560-802685B0 262EA0 0050+00 2/2 0/0 0/0 .text cM3d_InDivPos1__FPC3VecPC3VecfP3Vec
*/
void cM3d_InDivPos1(const Vec* pVecA, const Vec* pVecB, f32 pF, Vec* pOut) {
Vec tmp;
PSVECScale(pVecB, &tmp, pF);
PSVECAdd(&tmp, pVecA, pOut);
}
/* 802685B0-80268614 262EF0 0064+00 2/2 1/1 2/2 .text cM3d_InDivPos2__FPC3VecPC3VecfP3Vec
*/
void cM3d_InDivPos2(const Vec* pVecA, const Vec* pVecB, f32 pF, Vec* pOut) {
Vec tmp;
PSVECSubtract(pVecB, pVecA, &tmp);
cM3d_InDivPos1(pVecA, &tmp, pF, pOut);
}
/* 80268614-8026862C 262F54 0018+00 3/3 4/4 0/0 .text cM3d_Len2dSq__Fffff */
f32 cM3d_Len2dSq(f32 pX1, f32 pY1, f32 pX2, f32 pY2) {
f32 xDiff = pX1 - pX2;
f32 yDiff = pY1 - pY2;
return xDiff * xDiff + yDiff * yDiff;
}
/* ############################################################################################## */
/* 80451180-80451188 000680 0004+04 29/29 44/44 65/65 .sbss G_CM3D_F_ABS_MIN */
extern f32 G_CM3D_F_ABS_MIN;
/* 80455118-80455120 003718 0004+04 28/28 0/0 0/0 .sdata2 @2256 */
SECTION_SDATA2 static f32 lit_2256[1 + 1 /* padding */] = {
0.0f,
/* padding */
0.0f,
};
/* 80455120-80455128 003720 0008+00 9/9 0/0 0/0 .sdata2 @2257 */
SECTION_SDATA2 static f64 lit_2257 = 0.5;
/* 80455128-80455130 003728 0008+00 9/9 0/0 0/0 .sdata2 @2258 */
SECTION_SDATA2 static f64 lit_2258 = 3.0;
/* 80455130-80455138 003730 0008+00 9/9 0/0 0/0 .sdata2 @2259 */
SECTION_SDATA2 static u8 lit_2259[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80455138-8045513C 003738 0004+00 14/14 0/0 0/0 .sdata2 @2273 */
SECTION_SDATA2 static f32 lit_2273 = 1.0f;
/* 8026862C-80268710 262F6C 00E4+00 0/0 10/10 3/3 .text cM3d_Len2dSqPntAndSegLine__FffffffPfPfPf
*/
bool cM3d_Len2dSqPntAndSegLine(f32 param_1, f32 param_2, f32 param_3, f32 param_4, f32 p5, f32 p6,
f32* param_7, f32* param_8, f32* param_9) {
bool retVal = false;
f32 param_5 = p5 - param_3;
f32 param_6 = p6 - param_4;
f32 len = param_5 * param_5 + param_6 * param_6;
if (cM3d_IsZero(len)) {
*param_9 = /* 0.0 */ FLOAT_LABEL(lit_2256);
return retVal;
} else {
len = (param_5 * (param_1 - param_3) + param_6 * (param_2 - param_4)) / len;
if (len >= /* 0.0 */ FLOAT_LABEL(lit_2256) && len <= /* 1.0 */ FLOAT_LABEL(lit_2273)) {
retVal = true;
}
*param_7 = param_3 + param_5 * len;
*param_8 = param_4 + param_6 * len;
*param_9 = cM3d_Len2dSq(*param_7, *param_8, param_1, param_2);
return retVal;
}
}
/* 80268710-80268814 263050 0104+00 2/2 8/8 9/9 .text
* cM3d_Len3dSqPntAndSegLine__FPC8cM3dGLinPC3VecP3VecPf */
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin* pLine, const Vec* pVec, Vec* pOutVec, f32* pOutF) {
bool retVal = false;
Vec tmp;
PSVECSubtract(&pLine->GetEndP(), &pLine->GetStartP(), &tmp);
f32 seqLen = PSVECDotProduct(&tmp, &tmp);
if (cM3d_IsZero(seqLen)) {
*pOutF = /* 0.0 */ FLOAT_LABEL(lit_2256);
return retVal;
} else {
Vec tmp2;
PSVECSubtract(pVec, &pLine->GetStartP(), &tmp2);
f32 tmpF = PSVECDotProduct(&tmp2, &tmp);
tmpF /= seqLen;
if (tmpF < /* 0.0 */ FLOAT_LABEL(lit_2256) || tmpF > /* 1.0 */ FLOAT_LABEL(lit_2273)) {
retVal = false;
} else {
retVal = true;
}
PSVECScale(&tmp, &tmp, tmpF);
PSVECAdd(&tmp, &pLine->GetStartP(), pOutVec);
*pOutF = PSVECSquareDistance(pOutVec, pVec);
return retVal;
}
}
/* 80268814-80268894 263154 0080+00 1/1 3/3 0/0 .text cM3d_SignedLenPlaAndPos__FPC8cM3dGPlaPC3Vec
*/
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla* pPlane, const Vec* pPosition) {
f32 mag = PSVECMag(&pPlane->GetNP());
if (cM3d_IsZero(mag)) {
return /* 0.0 */ FLOAT_LABEL(lit_2256);
} else {
return (pPlane->mD + PSVECDotProduct(&pPlane->GetNP(), pPosition)) / mag;
}
}
/* 80268894-802688B4 2631D4 0020+00 11/11 2/2 2/2 .text cM3d_VectorProduct2d__Fffffff */
f32 cM3d_VectorProduct2d(f32 pX1, f32 pY1, f32 pX2, f32 pY2, f32 pX3, f32 pY3) {
return (pX2 - pX1) * (pY3 - pY1) - (pY2 - pY1) * (pX3 - pX1);
}
/* 802688B4-8026891C 2631F4 0068+00 0/0 0/0 1/1 .text
* cM3d_VectorProduct__FPC4cXyzPC4cXyzPC4cXyzP4cXyz */
void cM3d_VectorProduct(const cXyz* pVecA, const cXyz* pVecB, const cXyz* pVecC, cXyz* pVecOut) {
Vec tmp1;
Vec tmp2;
PSVECSubtract(pVecB, pVecA, &tmp1);
PSVECSubtract(pVecC, pVecA, &tmp2);
PSVECCrossProduct(&tmp1, &tmp2, pVecOut);
}
/* ############################################################################################## */
/* 8045513C-80455140 00373C 0004+00 1/1 0/0 0/0 .sdata2 @2346 */
SECTION_SDATA2 static f32 lit_2346 = 1.0f / 50.0f;
/* 8026891C-802689E8 26325C 00CC+00 0/0 2/2 0/0 .text cM3d_CalcPla__FPC3VecPC3VecPC3VecP3VecPf */
void cM3d_CalcPla(const Vec* pVecA, const Vec* pVecB, const Vec* pVecC, Vec* pVecOut, f32* pD) {
Vec tmp2;
Vec tmp1;
PSVECSubtract(pVecB, pVecA, &tmp1);
PSVECSubtract(pVecC, pVecA, &tmp2);
PSVECCrossProduct(&tmp1, &tmp2, pVecOut);
f32 mag = PSVECMag(pVecOut);
if (fabsf(mag) >= /* 0.02 */ FLOAT_LABEL(lit_2346)) {
PSVECScale(pVecOut, pVecOut, /* 1.0 */ FLOAT_LABEL(lit_2273) / mag);
*pD = -PSVECDotProduct(pVecOut, pVecA);
} else {
f32 zero = /* 0.0 */ FLOAT_LABEL(lit_2256);
pVecOut->y = zero;
*pD = zero;
pVecOut->z = zero;
pVecOut->x = zero;
}
}
inline bool cM3d_CrossNumSection(f32 lMinX, f32 lMaxX, f32 rMinX, f32 rMaxX) {
if (lMinX > rMaxX) {
return false;
} else if (lMaxX < rMinX) {
return false;
} else if (rMinX > lMaxX) {
return false;
} else if (rMaxX < lMinX) {
return false;
} else {
return true;
}
}
/* 802689E8-80268B0C 263328 0124+00 0/0 4/4 0/0 .text cM3d_Cross_AabAab__FPC8cM3dGAabPC8cM3dGAab
*/
bool cM3d_Cross_AabAab(const cM3dGAab* pAabA, const cM3dGAab* pAabB) {
if (cM3d_CrossNumSection(pAabA->getMinP().x, pAabA->getMaxP().x, pAabB->getMinP().x,
pAabB->getMaxP().x) &&
cM3d_CrossNumSection(pAabA->getMinP().y, pAabA->getMaxP().y, pAabB->getMinP().y,
pAabB->getMaxP().y) &&
cM3d_CrossNumSection(pAabA->getMinP().z, pAabA->getMaxP().z, pAabB->getMinP().z,
pAabB->getMaxP().z)) {
return true;
} else {
return false;
}
}
/* 80268B0C-80268BB4 26344C 00A8+00 0/0 4/4 0/0 .text cM3d_Cross_AabCyl__FPC8cM3dGAabPC8cM3dGCyl
*/
bool cM3d_Cross_AabCyl(const cM3dGAab* pAab, const cM3dGCyl* pCyl) {
if (pAab->getMinP().x > pCyl->GetCP().x + pCyl->GetR()) {
return false;
} else if (pAab->getMaxP().x < pCyl->GetCP().x - pCyl->GetR()) {
return false;
} else if (pAab->getMinP().z > pCyl->GetCP().z + pCyl->GetR()) {
return false;
} else if (pAab->getMaxP().z < pCyl->GetCP().z - pCyl->GetR()) {
return false;
} else if (pAab->getMinP().y > pCyl->GetCP().y + pCyl->GetH()) {
return false;
} else if (pAab->getMaxP().y < pCyl->GetCP().y) {
return false;
} else {
return true;
}
}
/* 80268BB4-80268C5C 2634F4 00A8+00 0/0 2/2 0/0 .text cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph
*/
#ifdef NON_MATCHING
bool cM3d_Cross_AabSph(const cM3dGAab* pAab, const cM3dGSph* pSph) {
f32 radius = pSph->GetR();
if (pAab->GetMinX() > pSph->GetC().GetX() + radius) { // addition registers are flipped
return false;
} else if (pAab->GetMaxX() < pSph->GetC().GetX() - radius) {
return false;
} else if (pAab->GetMinZ() > pSph->GetC().GetZ() + radius) {
return false;
} else if (pAab->GetMaxZ() < pSph->GetC().GetZ() - radius) {
return false;
} else if (pAab->GetMinY() > pSph->GetC().GetY() + radius) {
return false;
} else if (pAab->GetMaxY() < pSph->GetC().GetY() - radius) {
return false;
} else {
return true;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_AabSph(cM3dGAab const* param_0, cM3dGSph const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s"
}
#pragma pop
#endif
/* 80268C5C-80268ED4 26359C 0278+00 3/3 0/0 0/0 .text
* cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf */
#ifdef NON_MATCHING
int cM3d_Check_LinLin(const cM3dGLin* pLinA, const cM3dGLin* pLinB, f32* pFloatA, f32* pFloatB) {
Vec linAVec;
Vec linBVec;
pLinA->CalcVec(&linAVec);
pLinB->CalcVec(&linBVec);
f32 linALen = PSVECMag(&linAVec);
f32 linBLen = PSVECMag(&linBVec);
if (cM3d_IsZero(linALen) || cM3d_IsZero(linBLen)) {
return 1;
} else {
f32 invLinALen = /* 1.0 */ FLOAT_LABEL(lit_2273) / linALen;
f32 invLinBLen = /* 1.0 */ FLOAT_LABEL(lit_2273) / linBLen;
PSVECScale(&linAVec, &linAVec, invLinALen);
PSVECScale(&linBVec, &linBVec, invLinBLen);
Vec tmp;
PSVECSubtract(&pLinA->GetStartP(), &pLinB->GetStartP(), &tmp);
f32 tmpF = -PSVECDotProduct(&linAVec, &linBVec);
f32 tmpF2 = PSVECDotProduct(&tmp, &linAVec);
PSVECSquareMag(&tmp); // result not used
f32 tmpF3 = fabsf(/* 1.0 */ FLOAT_LABEL(lit_2273) - (tmpF * tmpF));
if (!cM3d_IsZero(tmpF3)) {
f32 tmpF4 = -PSVECDotProduct(&tmp, &linBVec);
f32 tmpF7 = /* 1.0 */ FLOAT_LABEL(lit_2273) / tmpF3;
f32 outFloatAtmp = ((tmpF * tmpF4) - tmpF2) * tmpF7;
*pFloatA = outFloatAtmp * invLinALen;
f32 outFloatBtmp = ((tmpF * tmpF2) - tmpF4) * tmpF7;
*pFloatB = outFloatBtmp * invLinBLen;
return 3;
} else {
f32 tmpF5 = -tmpF2;
f32 tmpF6 =
/* 0.0 */ FLOAT_LABEL(lit_2256); // would match with literals instead of labels
if (tmpF5 < /* 0.0 */ FLOAT_LABEL(lit_2256) || (tmpF5 > linALen)) {
tmpF6 = linBLen;
tmpF5 = (tmpF6 * tmpF) - tmpF2;
}
f32 tmpF7 = PSVECDotProduct(&tmp, &linBVec);
if (tmpF5 < /* 0.0 */ FLOAT_LABEL(lit_2256) || tmpF5 > linALen) {
tmpF5 = /* 0.0 */ FLOAT_LABEL(lit_2256);
tmpF6 = tmpF7;
}
if (tmpF6 < /* 0.0 */ FLOAT_LABEL(lit_2256) || tmpF6 > linBLen) {
tmpF5 = linALen;
tmpF6 = tmpF7 + (-linALen * tmpF);
}
*pFloatA = tmpF5 * invLinALen;
*pFloatB = tmpF6 * invLinBLen;
return 2;
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int cM3d_Check_LinLin(cM3dGLin const* param_0, cM3dGLin const* param_1, f32* param_2,
f32* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf.s"
}
#pragma pop
#endif
/* 80268ED4-80268F34 263814 0060+00 2/2 0/0 0/0 .text
* cM3d_CrossInfLineVsInfPlane_proc__FffPC3VecPC3VecP3Vec */
static bool cM3d_CrossInfLineVsInfPlane_proc(f32 pFloatA, f32 pFloatB, const Vec* pVecA,
const Vec* pVecB, Vec* pVecOut) {
if (cM3d_IsZero(pFloatA - pFloatB)) {
*pVecOut = *pVecB;
return false;
} else {
cM3d_InDivPos2(pVecA, pVecB, pFloatA / (pFloatA - pFloatB), pVecOut);
return true;
}
}
/* 80268F34-80269050 263874 011C+00 3/3 1/1 0/0 .text
* cM3d_Cross_LinPla__FPC8cM3dGLinPC8cM3dGPlaP3Vecbb */
#ifdef NON_MATCHING
bool cM3d_Cross_LinPla(const cM3dGLin* pLine, const cM3dGPla* pPlane, Vec* pVecOut, bool pBoolA,
bool pBoolB) {
f32 startVal = pPlane->getPlaneFunc(&pLine->GetStartP());
f32 endVal = pPlane->getPlaneFunc(&pLine->GetEndP());
if (startVal * endVal > /* 0.0 */ FLOAT_LABEL(lit_2256)) {
// matches with the literal, but that screws up data
// if (startVal * endVal > 0) {
*pVecOut = pLine->GetEndP();
return false;
} else {
if (startVal >= /* 0.0 */ FLOAT_LABEL(lit_2256) &&
endVal <= /* 0.0 */ FLOAT_LABEL(lit_2256)) {
// if (startVal >= 0 && endVal <= 0) {
if (pBoolA) {
return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &pLine->GetStartP(),
&pLine->GetEndP(), pVecOut);
}
} else {
if (pBoolB) {
return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &pLine->GetStartP(),
&pLine->GetEndP(), pVecOut);
}
}
*pVecOut = pLine->GetEndP();
return true;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_LinPla(cM3dGLin const* param_0, cM3dGPla const* param_1, Vec* param_2,
bool param_3, bool param_4) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_LinPla__FPC8cM3dGLinPC8cM3dGPlaP3Vecbb.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80455140-80455144 003740 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE0 */
SECTION_SDATA2 static u32 BPCP_OUTCODE0 = 0x00000001;
/* 80455144-80455148 003744 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE1 */
SECTION_SDATA2 static u32 BPCP_OUTCODE1 = 0x00000002;
/* 80455148-8045514C 003748 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE4 */
SECTION_SDATA2 static u32 BPCP_OUTCODE4 = 0x00000010;
/* 8045514C-80455150 00374C 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE5 */
SECTION_SDATA2 static u32 BPCP_OUTCODE5 = 0x00000020;
/* 80455150-80455154 003750 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE2 */
SECTION_SDATA2 static u32 BPCP_OUTCODE2 = 0x00000004;
/* 80455154-80455158 003754 0004+00 1/1 0/0 0/0 .sdata2 BPCP_OUTCODE3 */
SECTION_SDATA2 static u32 BPCP_OUTCODE3 = 0x00000008;
/* 80455158-8045515C 003758 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE0 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE0 = 0x00000001;
/* 8045515C-80455160 00375C 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE1 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE1 = 0x00000002;
/* 80455160-80455164 003760 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE2 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE2 = 0x00000004;
/* 80455164-80455168 003764 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE3 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE3 = 0x00000008;
/* 80455168-8045516C 003768 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE4 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE4 = 0x00000010;
/* 8045516C-80455170 00376C 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE5 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE5 = 0x00000020;
/* 80455170-80455174 003770 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE6 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE6 = 0x00000040;
/* 80455174-80455178 003774 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE7 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE7 = 0x00000080;
/* 80455178-8045517C 003778 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE8 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE8 = 0x00000100;
/* 8045517C-80455180 00377C 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE9 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE9 = 0x00000200;
/* 80455180-80455184 003780 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE10 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE10 = 0x00000400;
/* 80455184-80455188 003784 0004+00 1/1 0/0 0/0 .sdata2 BEVEL2D_OUTCODE11 */
SECTION_SDATA2 static u32 BEVEL2D_OUTCODE11 = 0x00000800;
/* 80455188-8045518C 003788 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE0 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE0 = 0x00000001;
/* 8045518C-80455190 00378C 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE1 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE1 = 0x00000002;
/* 80455190-80455194 003790 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE2 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE2 = 0x00000004;
/* 80455194-80455198 003794 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE3 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE3 = 0x00000008;
/* 80455198-8045519C 003798 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE4 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE4 = 0x00000010;
/* 8045519C-804551A0 00379C 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE5 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE5 = 0x00000020;
/* 804551A0-804551A4 0037A0 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE6 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE6 = 0x00000040;
/* 804551A4-804551A8 0037A4 0004+00 1/1 0/0 0/0 .sdata2 BEVEL3D_OUTCODE7 */
SECTION_SDATA2 static u32 BEVEL3D_OUTCODE7 = 0x00000080;
/* 804551A8-804551AC 0037A8 0004+00 1/1 0/0 0/0 .sdata2 @3082 */
SECTION_SDATA2 static f32 lit_3082 = -1.0f;
/* 80269050-80269C2C 263990 0BDC+00 0/0 2/2 0/0 .text
* cM3d_Cross_MinMaxBoxLine__FPC3VecPC3VecPC3VecPC3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_MinMaxBoxLine(Vec const* param_0, Vec const* param_1, Vec const* param_2,
Vec const* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_MinMaxBoxLine__FPC3VecPC3VecPC3VecPC3Vec.s"
}
#pragma pop
/* 80269C2C-80269D64 26456C 0138+00 1/1 0/0 0/0 .text
* cM3d_InclusionCheckPosIn3PosBox3d__FPC3VecPC3VecPC3VecPC3Vecf */
bool cM3d_InclusionCheckPosIn3PosBox3d(const Vec* pVecA, const Vec* pVecB, const Vec* pVecC,
const Vec* pVecD, f32 pF) {
f32 min, max;
if (pVecA->GetX() < pVecB->GetX()) {
min = pVecA->GetX();
max = pVecB->GetX();
} else {
min = pVecB->GetX();
max = pVecA->GetX();
}
if (min > pVecC->GetX()) {
min = pVecC->GetX();
} else if (max < pVecC->GetX()) {
max = pVecC->GetX();
}
if (min - pF > pVecD->GetX() || max + pF < pVecD->GetX()) {
return false;
}
if (pVecA->GetZ() < pVecB->GetZ()) {
min = pVecA->GetZ();
max = pVecB->GetZ();
} else {
min = pVecB->GetZ();
max = pVecA->GetZ();
}
if (min > pVecC->GetZ()) {
min = pVecC->GetZ();
} else if (max < pVecC->GetZ()) {
max = pVecC->GetZ();
}
if (min - pF > pVecD->GetZ() || max + pF < pVecD->GetZ()) {
return false;
}
if (pVecA->GetY() < pVecB->GetY()) {
min = pVecA->GetY();
max = pVecB->GetY();
} else {
min = pVecB->GetY();
max = pVecA->GetY();
}
if (min > pVecC->GetY()) {
min = pVecC->GetY();
} else if (max < pVecC->GetY()) {
max = pVecC->GetY();
}
if (min - pF > pVecD->GetY() || max + pF < pVecD->GetY()) {
return false;
}
return true;
}
/* 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"
}
#pragma pop
/* ############################################################################################## */
/* 804551AC-804551B0 0037AC 0004+00 11/11 0/0 0/0 .sdata2 @3205 */
SECTION_SDATA2 static f32 lit_3205 = 0.004999999888241291f;
/* 80269E18-80269FBC 264758 01A4+00 1/1 0/0 0/0 .text cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vecf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossX_Tri(cM3dGTri const* param_0, Vec const* param_1, f32 param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vecf.s"
}
#pragma pop
/* ############################################################################################## */
/* 804551B0-804551B4 0037B0 0004+00 7/7 0/0 0/0 .sdata2 @3229 */
SECTION_SDATA2 static f32 lit_3229 = 20.0f;
/* 804551B4-804551B8 0037B4 0004+00 8/8 0/0 0/0 .sdata2 @3230 */
SECTION_SDATA2 static f32 lit_3230 = -20.0f;
/* 80269FBC-8026A160 2648FC 01A4+00 1/1 0/0 0/0 .text cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossX_Tri(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossX_Tri__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026A160-8026A2E4 264AA0 0184+00 1/1 0/0 0/0 .text cM3d_CrossX_LinTri_proc__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossX_LinTri_proc(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossX_LinTri_proc__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026A2E4-8026A488 264C24 01A4+00 2/2 0/0 1/1 .text cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_CrossY_Tri(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026A488-8026A60C 264DC8 0184+00 1/1 0/0 0/0 .text cM3d_CrossY_LinTri_proc__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossY_LinTri_proc(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_LinTri_proc__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026A60C-8026A7B8 264F4C 01AC+00 0/0 2/2 0/0 .text
* cM3d_CrossY_Tri__FRC3VecRC3VecRC3VecRC8cM3dGPlaPC3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_CrossY_Tri(Vec const& param_0, Vec const& param_1, Vec const& param_2,
cM3dGPla const& param_3, Vec const* param_4) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri__FRC3VecRC3VecRC3VecRC8cM3dGPlaPC3Vec.s"
}
#pragma pop
/* 8026A7B8-8026A8C0 2650F8 0108+00 0/0 1/1 0/0 .text
* cM3d_CrossY_Tri_Front__FRC3VecRC3VecRC3VecPC3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_CrossY_Tri_Front(Vec const& param_0, Vec const& param_1, Vec const& param_2,
Vec const* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri_Front__FRC3VecRC3VecRC3VecPC3Vec.s"
}
#pragma pop
/* 8026A8C0-8026A944 265200 0084+00 1/1 0/0 0/0 .text cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossY_Tri(cM3dGTri const* param_0, Vec const* param_1, f32* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPf.s"
}
#pragma pop
/* 8026A944-8026AAE8 265284 01A4+00 1/1 0/0 0/0 .text cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vecf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossY_Tri(cM3dGTri const* param_0, Vec const* param_1, f32 param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri__FPC8cM3dGTriPC3Vecf.s"
}
#pragma pop
/* 8026AAE8-8026ABD8 265428 00F0+00 1/1 0/0 0/0 .text
* cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPC10cM3d_RangePf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossY_Tri(cM3dGTri const* param_0, Vec const* param_1,
cM3d_Range const* param_2, f32* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossY_Tri__FPC8cM3dGTriPC3VecPC10cM3d_RangePf.s"
}
#pragma pop
/* 8026ABD8-8026AD7C 265518 01A4+00 1/1 0/0 0/0 .text cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vecf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossZ_Tri(cM3dGTri const* param_0, Vec const* param_1, f32 param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vecf.s"
}
#pragma pop
/* 8026AD7C-8026AF20 2656BC 01A4+00 1/1 0/0 0/0 .text cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossZ_Tri(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossZ_Tri__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026AF20-8026B0A4 265860 0184+00 1/1 0/0 0/0 .text cM3d_CrossZ_LinTri_proc__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_CrossZ_LinTri_proc(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CrossZ_LinTri_proc__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* ############################################################################################## */
/* 804551B8-804551BC 0037B8 0004+00 1/1 0/0 0/0 .sdata2 @3497 */
SECTION_SDATA2 static f32 lit_3497 = 1.0f / 125.0f;
/* 8026B0A4-8026B17C 2659E4 00D8+00 1/1 1/1 0/0 .text
* cM3d_Cross_LinTri__FPC8cM3dGLinPC8cM3dGTriP3Vecbb */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_LinTri(cM3dGLin const* param_0, cM3dGTri const* param_1, Vec* param_2,
bool param_3, bool param_4) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_LinTri__FPC8cM3dGLinPC8cM3dGTriP3Vecbb.s"
}
#pragma pop
/* 8026B17C-8026B238 265ABC 00BC+00 1/1 0/0 0/0 .text cM3d_Cross_LinTri_Easy__FPC8cM3dGTriPC3Vec
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_Cross_LinTri_Easy(cM3dGTri const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_LinTri_Easy__FPC8cM3dGTriPC3Vec.s"
}
#pragma pop
/* 8026B238-8026B280 265B78 0048+00 1/1 0/0 0/0 .text cM3d_Cross_SphPnt__FPC8cM3dGSphPC3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_Cross_SphPnt(cM3dGSph const* param_0, Vec const* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_SphPnt__FPC8cM3dGSphPC3Vec.s"
}
#pragma pop
/* 8026B280-8026B4E8 265BC0 0268+00 1/1 0/0 2/2 .text
* cM3d_Cross_LinSph__FPC8cM3dGLinPC8cM3dGSphP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_LinSph(cM3dGLin const* param_0, cM3dGSph const* param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_LinSph__FPC8cM3dGLinPC8cM3dGSphP3Vec.s"
}
#pragma pop
/* ############################################################################################## */
/* 804551BC-804551C0 0037BC 0004+00 2/2 0/0 0/0 .sdata2 @3739 */
SECTION_SDATA2 static f32 lit_3739 = 2.0f;
/* 804551C0-804551C4 0037C0 0004+00 2/2 0/0 0/0 .sdata2 @3740 */
SECTION_SDATA2 static f32 lit_3740 = 4.0f;
/* 8026B4E8-8026B8A4 265E28 03BC+00 1/1 2/2 0/0 .text
* cM3d_Cross_LinSph_CrossPos__FRC8cM3dGSphRC8cM3dGLinP3VecP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int cM3d_Cross_LinSph_CrossPos(cM3dGSph const& param_0, cM3dGLin const& param_1, Vec* param_2,
Vec* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_LinSph_CrossPos__FRC8cM3dGSphRC8cM3dGLinP3VecP3Vec.s"
}
#pragma pop
/* 8026B8A4-8026BA48 2661E4 01A4+00 0/0 2/2 0/0 .text cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphPf
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CylSph(cM3dGCyl const* param_0, cM3dGSph const* param_1, f32* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphPf.s"
}
#pragma pop
/* 8026BA48-8026BC7C 266388 0234+00 1/1 2/2 0/0 .text
* cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphP3VecPf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CylSph(cM3dGCyl const* param_0, cM3dGSph const* param_1, Vec* param_2,
f32* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphP3VecPf.s"
}
#pragma pop
/* 8026BC7C-8026BCFC 2665BC 0080+00 0/0 1/1 0/0 .text cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPf
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_SphSph(cM3dGSph const* param_0, cM3dGSph const* param_1, f32* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPf.s"
}
#pragma pop
/* 8026BCFC-8026BD88 26663C 008C+00 1/1 0/0 0/0 .text
* cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPfPf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_Cross_SphSph(cM3dGSph const* param_0, cM3dGSph const* param_1, f32* param_2,
f32* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPfPf.s"
}
#pragma pop
/* 8026BD88-8026BE5C 2666C8 00D4+00 0/0 1/1 0/0 .text
* cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphP3Vec */
bool cM3d_Cross_SphSph(const cM3dGSph* pSphereA, const cM3dGSph* pSphereB, Vec* pVecOut) {
f32 centerDist;
f32 overlapLen;
if (cM3d_Cross_SphSph(pSphereA, pSphereB, &centerDist, &overlapLen)) {
if (!cM3d_IsZero(centerDist)) {
// could be an inlined function
f32 tmpF = pSphereB->GetR() / centerDist;
Vec tmp;
PSVECSubtract(&pSphereA->GetC(), &pSphereB->GetC(), &tmp);
PSVECScale(&tmp, &tmp, tmpF);
PSVECAdd(&tmp, &pSphereB->GetC(), pVecOut);
} else {
*pVecOut = pSphereA->GetC();
}
return true;
} else {
return false;
}
}
/* ############################################################################################## */
/* 804551C4-804551C8 0037C4 0004+00 8/8 0/0 0/0 .sdata2 @3892 */
SECTION_SDATA2 static f32 lit_3892 = 0.5f;
/* 8026BE5C-8026BF04 26679C 00A8+00 1/1 0/0 0/0 .text
* cM3d_CalcSphVsTriCrossPoint__FPC8cM3dGSphPC8cM3dGTriP3Vec */
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph* pSphere, const cM3dGTri* pTriangle, Vec* pVecOut) {
Vec tmp2;
Vec tmp;
PSVECAdd(&pTriangle->mA, &pTriangle->mB, &tmp);
PSVECScale(&tmp, &tmp2, /* 0.5 */ FLOAT_LABEL(lit_3892));
f32 sqDist = PSVECSquareDistance(&tmp2, &pSphere->GetC());
if (cM3d_IsZero(sqDist)) {
*pVecOut = pSphere->GetC();
} else {
cM3d_InDivPos2(&pSphere->GetC(), &tmp2, pSphere->GetR() / sqDist, pVecOut);
}
}
/* 8026BF04-8026C22C 266844 0328+00 1/1 4/4 0/0 .text
* cM3d_Cross_SphTri__FPC8cM3dGSphPC8cM3dGTriP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_SphTri(cM3dGSph const* param_0, cM3dGTri const* param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_SphTri__FPC8cM3dGSphPC8cM3dGTriP3Vec.s"
}
#pragma pop
/* 8026C22C-8026C3B4 266B6C 0188+00 0/0 1/1 0/0 .text cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylPf
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CylCyl(cM3dGCyl const* param_0, cM3dGCyl const* param_1, f32* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylPf.s"
}
#pragma pop
/* 8026C3B4-8026C5D0 266CF4 021C+00 0/0 1/1 0/0 .text
* cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CylCyl(cM3dGCyl const* param_0, cM3dGCyl const* param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylP3Vec.s"
}
#pragma pop
/* ############################################################################################## */
/* 804551C8-804551CC 0037C8 0004+00 1/1 0/0 0/0 .sdata2 @4255 */
SECTION_SDATA2 static f32 lit_4255 = 1000000000.0f;
/* 8026C5D0-8026C944 266F10 0374+00 0/0 2/2 0/0 .text
* cM3d_Cross_CylTri__FPC8cM3dGCylPC8cM3dGTriP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CylTri(cM3dGCyl const* param_0, cM3dGTri const* param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylTri__FPC8cM3dGCylPC8cM3dGTriP3Vec.s"
}
#pragma pop
/* 8026C944-8026D044 267284 0700+00 1/1 2/2 1/1 .text
* cM3d_Cross_CylLin__FPC8cM3dGCylPC8cM3dGLinP3VecP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int cM3d_Cross_CylLin(cM3dGCyl const* param_0, cM3dGLin const* param_1, Vec* param_2,
Vec* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CylLin__FPC8cM3dGCylPC8cM3dGLinP3VecP3Vec.s"
}
#pragma pop
/* 8026D044-8026D0B0 267984 006C+00 1/1 0/0 0/0 .text
* cM3d_Cross_CylPntPnt__FPC8cM3dGCylPC3VecPC3VecP3VecP3Vec */
static int cM3d_Cross_CylPntPnt(const cM3dGCyl* pCylinder, const Vec* pVecStart, const Vec* pVecEnd,
Vec* pVecOutA, Vec* pVecOutB) {
cM3dGLin lin;
lin.SetStartEnd(*pVecStart, *pVecEnd);
return cM3d_Cross_CylLin(pCylinder, &lin, pVecOutA, pVecOutB);
}
/* 8026D0B0-8026D114 2679F0 0064+00 2/2 0/0 0/0 .text cM3d_Cross_CylPnt__FPC8cM3dGCylPC3Vec */
bool cM3d_Cross_CylPnt(const cM3dGCyl* pCylinder, const Vec* pPoint) {
f32 dX = pCylinder->GetCP().getXDiff(pPoint);
f32 dZ = pCylinder->GetCP().getZDiff(pPoint);
f32 maxY = pCylinder->GetCP().y + pCylinder->GetH();
if (dX * dX + dZ * dZ < pCylinder->GetR() * pCylinder->GetR() &&
pCylinder->GetCP().y < pPoint->y && maxY > pPoint->y) {
return true;
} else {
return false;
}
}
/* 8026D114-8026D3D4 267A54 02C0+00 0/0 2/2 0/0 .text
* cM3d_Cross_CpsCps__FRC8cM3dGCpsRC8cM3dGCpsP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CpsCps(cM3dGCps const& param_0, cM3dGCps const& param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsCps__FRC8cM3dGCpsRC8cM3dGCpsP3Vec.s"
}
#pragma pop
/* 8026D3D4-8026DAE0 267D14 070C+00 0/0 4/4 0/0 .text
* cM3d_Cross_CpsCyl__FRC8cM3dGCpsRC8cM3dGCylP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CpsCyl(cM3dGCps const& param_0, cM3dGCyl const& param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsCyl__FRC8cM3dGCpsRC8cM3dGCylP3Vec.s"
}
#pragma pop
/* 8026DAE0-8026DC3C 268420 015C+00 1/1 0/0 0/0 .text
* cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRC3VecP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool cM3d_Cross_CpsSph_CrossPos(cM3dGCps const& param_0, cM3dGSph const& param_1,
Vec const& param_2, Vec* param_3) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRC3VecP3Vec.s"
}
#pragma pop
/* 8026DC3C-8026DE2C 26857C 01F0+00 0/0 4/4 0/0 .text
* cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CpsSph(cM3dGCps const& param_0, cM3dGSph const& param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphP3Vec.s"
}
#pragma pop
/* 8026DE2C-8026E12C 26876C 0300+00 0/0 1/1 0/0 .text
* cM3d_Cross_TriTri__FRC8cM3dGTriRC8cM3dGTriP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_TriTri(cM3dGTri const& param_0, cM3dGTri const& param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_TriTri__FRC8cM3dGTriRC8cM3dGTriP3Vec.s"
}
#pragma pop
inline void cM3d_2LinCenter(cM3dGLin const pLinA, f32 pLinAF, cM3dGLin const& pLinB, f32 pLinBF,
Vec* pVecOut) {
Vec tmp, tmp2;
pLinA.CalcPos(&tmp, pLinAF);
pLinB.CalcPos(&tmp2, pLinBF);
PSVECAdd(&tmp, &tmp2, pVecOut);
PSVECScale(pVecOut, pVecOut, /* 0.5 */ FLOAT_LABEL(lit_3892));
}
/* 8026E12C-8026E4FC 268A6C 03D0+00 0/0 2/2 0/0 .text
* cM3d_Cross_CpsTri__FRC8cM3dGCps8cM3dGTriP3Vec */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool cM3d_Cross_CpsTri(cM3dGCps const& param_0, cM3dGTri param_1, Vec* param_2) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_CpsTri__FRC8cM3dGCps8cM3dGTriP3Vec.s"
}
#pragma pop
/* 8026E4FC-8026E570 268E3C 0074+00 0/0 0/0 1/1 .text cM3d_CalcVecAngle__FRC3VecPsPs */
void cM3d_CalcVecAngle(const Vec& pVec, s16* pOutA, s16* pOutB) {
*pOutA = -cM_atan2s(-pVec.z * pVec.y, /* 1.0 */ FLOAT_LABEL(lit_2273));
*pOutB = cM_atan2s(-pVec.x * pVec.y, /* 1.0 */ FLOAT_LABEL(lit_2273));
}
/* 8026E570-8026E6C4 268EB0 0154+00 0/0 1/1 0/0 .text cM3d_CalcVecZAngle__FRC3VecP5csXyz
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void cM3d_CalcVecZAngle(Vec const& param_0, csXyz* param_1) {
nofralloc
#include "asm/SSystem/SComponent/c_m3d/cM3d_CalcVecZAngle__FRC3VecP5csXyz.s"
}
#pragma pop
/* 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,
f32* pF2) {
*pF1 = ((f2 * f7) - (f4 * f6)) / f5;
*pF2 = ((f3 * f6) - (f1 * f7)) / f5;
}
/* 8026E6F0-8026E8A0 269030 01B0+00 2/2 0/0 0/0 .text
* cM3d_2PlaneCrossLine__FRC8cM3dGPlaRC8cM3dGPlaP8cM3dGLin */
static int cM3d_2PlaneCrossLine(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB,
cM3dGLin* pLinOut) {
Vec tmp;
PSVECCrossProduct(&pPlaneA.GetNP(), &pPlaneB.GetNP(), &tmp);
if (cM3d_IsZero(tmp.x) && cM3d_IsZero(tmp.y) && cM3d_IsZero(tmp.z)) {
return 0;
} else {
f32 absTX = fabsf(tmp.x);
f32 absTY = fabsf(tmp.y);
f32 absTZ = fabsf(tmp.z);
if (absTX >= absTY && absTX >= absTZ) {
cM3d_PlaneCrossLineProcWork(pPlaneA.GetNP().y, pPlaneA.GetNP().z, pPlaneB.GetNP().y,
pPlaneB.GetNP().z, tmp.x, pPlaneA.GetD(), pPlaneB.GetD(),
&pLinOut->GetStartP().y, &pLinOut->GetStartP().z);
pLinOut->GetStartP().x = /* 0.0 */ FLOAT_LABEL(lit_2256);
} else if (absTY >= absTX && absTY >= absTZ) {
cM3d_PlaneCrossLineProcWork(pPlaneA.GetNP().z, pPlaneA.GetNP().x, pPlaneB.GetNP().z,
pPlaneB.GetNP().x, tmp.y, pPlaneA.GetD(), pPlaneB.GetD(),
&pLinOut->GetStartP().z, &pLinOut->GetStartP().x);
pLinOut->GetStartP().y = /* 0.0 */ FLOAT_LABEL(lit_2256);
} else {
cM3d_PlaneCrossLineProcWork(pPlaneA.GetNP().x, pPlaneA.GetNP().y, pPlaneB.GetNP().x,
pPlaneB.GetNP().y, tmp.z, pPlaneA.GetD(), pPlaneB.GetD(),
&pLinOut->GetStartP().x, &pLinOut->GetStartP().y);
pLinOut->GetStartP().z = /* 0.0 */ FLOAT_LABEL(lit_2256);
}
f32 scale = PSVECMag(&pLinOut->GetStartP());
if (cM3d_IsZero(scale)) {
scale = /* 1.0 */ FLOAT_LABEL(lit_2273);
}
PSVECScale(&tmp, &tmp, scale);
PSVECAdd(&pLinOut->GetStartP(), &tmp, &pLinOut->GetEndP());
return 1;
}
}
/* 8026E8A0-8026E980 2691E0 00E0+00 0/0 1/1 0/0 .text
* cM3d_3PlaneCrossPos__FRC8cM3dGPlaRC8cM3dGPlaRC8cM3dGPlaP3Vec */
bool cM3d_3PlaneCrossPos(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB, const cM3dGPla& pPlaneC,
Vec* pVecOut) {
cM3dGLin lin;
if (!cM3d_2PlaneCrossLine(pPlaneA, pPlaneB, &lin)) {
return false;
} else {
const Vec* end = &lin.GetEndP();
f32 tmpf1 = pPlaneC.getPlaneFunc(&lin.GetStartP());
f32 tmpf2 = pPlaneC.getPlaneFunc(end);
if (!cM3d_CrossInfLineVsInfPlane_proc(tmpf1, tmpf2, &lin.GetStartP(), end, pVecOut)) {
return false;
} else {
return true;
}
}
}
/* 8026E980-8026EA5C 2692C0 00DC+00 1/1 1/1 0/0 .text
* cM3d_lineVsPosSuisenCross__FPC8cM3dGLinPC3VecP3Vec */
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin* pLine, const Vec* pPoint, Vec* pVecOut) {
Vec tmp1;
Vec tmp2;
Vec tmp3;
pLine->CalcVec(&tmp1);
f32 diffLen = PSVECSquareMag(&tmp1);
if (cM3d_IsZero(diffLen)) {
*pVecOut = *pPoint;
return /* 0.0 */ FLOAT_LABEL(lit_2256);
} else {
PSVECSubtract(pPoint, &pLine->GetStartP(), &tmp2);
f32 retVal = PSVECDotProduct(&tmp2, &tmp1) / diffLen;
PSVECScale(&tmp1, &tmp3, retVal);
PSVECAdd(&tmp3, &pLine->GetStartP(), pVecOut);
return retVal;
}
}
/* 8026EA5C-8026EB38 26939C 00DC+00 0/0 1/1 0/0 .text
* cM3d_lineVsPosSuisenCross__FRC3VecRC3VecRC3VecP3Vec */
f32 cM3d_lineVsPosSuisenCross(const Vec& pLinePointA, const Vec& pLinePointB, const Vec& pPoint,
Vec* pVecOut) {
Vec tmp1;
Vec tmp2;
Vec tmp3;
PSVECSubtract(&pLinePointB, &pLinePointA, &tmp1);
f32 diffLen = PSVECSquareMag(&tmp1);
if (cM3d_IsZero(diffLen)) {
*pVecOut = pPoint;
return /* 0.0 */ FLOAT_LABEL(lit_2256);
} else {
PSVECSubtract(&pPoint, &pLinePointA, &tmp2);
f32 dotProd = PSVECDotProduct(&tmp2, &tmp1);
f32 retVal = dotProd / diffLen;
PSVECScale(&tmp1, &tmp3, retVal);
PSVECAdd(&tmp3, &pLinePointA, pVecOut);
return retVal;
}
}
/* 8026EB38-8026EBBC 269478 0084+00 0/0 1/1 0/0 .text
* cM3d_2PlaneLinePosNearPos__FRC8cM3dGPlaRC8cM3dGPlaPC3VecP3Vec */
int cM3d_2PlaneLinePosNearPos(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB, const Vec* pVec,
Vec* pVecOut) {
cM3dGLin lin;
if (!cM3d_2PlaneCrossLine(pPlaneA, pPlaneB, &lin)) {
return FALSE;
} else {
cM3d_lineVsPosSuisenCross(&lin, pVec, pVecOut);
return TRUE;
}
}
/* 8026EBBC-8026EC3C 2694FC 0080+00 0/0 1/1 0/0 .text cM3d_CrawVec__FRC3VecRC3VecP3Vec */
void cM3d_CrawVec(const Vec& pVecA, const Vec& pVecB, Vec* pVecOut) {
Vec tmp;
PSVECScale(&pVecA, &tmp, fabsf(pVecB.x * pVecA.x + pVecB.y * pVecA.y + pVecB.z * pVecA.z));
PSVECAdd(&tmp, &pVecB, pVecOut);
}