diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index 9ee8338beee..4b569623cb9 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -9,7 +9,13 @@ private: s16 mAngle; public: + const static cSAngle _0; + const static cSAngle _1; + const static cSAngle _90; + const static cSAngle _180; + const static cSAngle _270; cSAngle() {} + ~cSAngle() {} cSAngle(const cSAngle&); cSAngle(s16); cSAngle(float); @@ -39,8 +45,8 @@ public: bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; } operator s16(void) const { return mAngle; } void operator=(const cSAngle& other) { mAngle = other.mAngle; } - static cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); } - void mirrorAtMaxNeg(void) { *this = getMaxNegative() - *this; } + static inline cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); } + inline void mirrorAtMaxNeg(void) { *this = cSAngle((s16)-0x8000) - *this; } }; cSAngle operator+(short, const cSAngle&); diff --git a/libs/SSystem/SComponent/c_angle.cpp b/libs/SSystem/SComponent/c_angle.cpp index 58240ceae65..4d194858604 100644 --- a/libs/SSystem/SComponent/c_angle.cpp +++ b/libs/SSystem/SComponent/c_angle.cpp @@ -8,80 +8,18 @@ #include "dolphin/types.h" #include "msl_c/math.h" -f32 cAngle_NS_Adjust(f32,f32,f32); - -extern "C" void __ct__7cSAngleFRC7cSAngle(); -extern "C" void __ct__7cSAngleFs(); -extern "C" void __ct__7cSAngleFf(); -extern "C" void Val__7cSAngleFRC7cSAngle(); -extern "C" void Val__7cSAngleFs(); -extern "C" void Val__7cSAngleFf(); -extern "C" void Degree__7cSAngleCFv(); -extern "C" void Radian__7cSAngleCFv(); -extern "C" void Norm__7cSAngleCFv(); -extern "C" void Abs__7cSAngleCFv(); -extern "C" void Inv__7cSAngleCFv(); -extern "C" void Sin__7cSAngleCFv(); -extern "C" void Cos__7cSAngleCFv(); -extern "C" void __mi__7cSAngleCFv(); -extern "C" void __pl__7cSAngleCFRC7cSAngle(); -extern "C" void __mi__7cSAngleCFRC7cSAngle(); -extern "C" void __apl__7cSAngleFRC7cSAngle(); -extern "C" void __ami__7cSAngleFRC7cSAngle(); -extern "C" void __pl__7cSAngleCFs(); -extern "C" void __mi__7cSAngleCFs(); -extern "C" void __apl__7cSAngleFs(); -extern "C" void __ml__7cSAngleCFf(); -extern "C" void __amu__7cSAngleFf(); -extern "C" void __pl__FsRC7cSAngle(); -extern "C" void __mi__FsRC7cSAngle(); -extern "C" void __ct__7cDegreeFf(); -extern "C" void Formal__7cDegreeFv(); -extern "C" void Val__7cDegreeFf(); -extern "C" void Radian__7cDegreeCFv(); -extern "C" void Sin__7cDegreeCFv(); -extern "C" void Cos__7cDegreeCFv(); -extern "C" void Tan__7cDegreeCFv(); -extern "C" void __ct__7cSPolarFRC4cXyz(); -extern "C" void Formal__7cSPolarFv(); -extern "C" void Val__7cSPolarFfss(); -extern "C" void Val__7cSPolarFRC4cXyz(); -extern "C" void Xyz__7cSPolarCFv(); -extern "C" void Globe__7cSPolarCFP7cSGlobe(); -extern "C" void __ct__7cSGlobeFRC7cSGlobe(); -extern "C" void __ct__7cSGlobeFfss(); -extern "C" void __ct__7cSGlobeFfRC7cSAngleRC7cSAngle(); -extern "C" void __ct__7cSGlobeFRC4cXyz(); -extern "C" void Formal__7cSGlobeFv(); -extern "C" void Val__7cSGlobeFRC7cSGlobe(); -extern "C" void Val__7cSGlobeFfss(); -extern "C" void Val__7cSGlobeFfRC7cSAngleRC7cSAngle(); -extern "C" void Val__7cSGlobeFRC4cXyz(); -extern "C" void Xyz__7cSGlobeCFv(); -extern "C" void Polar__7cSGlobeCFP7cSPolar(); -extern "C" void Norm__7cSGlobeCFv(); -extern "C" void Invert__7cSGlobeFv(); -extern "C" void func_80271BA8(); -extern "C" void __sinit_c_angle_cpp(); -extern "C" extern u8 _0__7cSAngle[2 + 2 /* padding */]; -extern "C" extern u8 _90__7cSAngle[2 + 2 /* padding */]; -extern "C" extern u8 _180__7cSAngle[2 + 2 /* padding */]; -extern "C" extern u8 _270__7cSAngle[2 + 6 /* padding */]; - -// -// External References: -// - -f32 cM_atan2f(f32, f32); - -extern "C" void __dt__7cSAngleFv(); -extern "C" void cM_atan2f__Fff(); -extern "C" void __register_global_object(); +extern f32 cM_atan2f(f32, f32); // // Declarations: // +const cSAngle cSAngle::_0(static_cast(0)); +const cSAngle cSAngle::_1(static_cast(0xb6)); +const cSAngle cSAngle::_90(static_cast(0x4000)); +const cSAngle cSAngle::_180(static_cast(-0x8000)); +const cSAngle cSAngle::_270(static_cast(-0x4000)); + /* 80270F68-80270F98 0030+00 s=0 e=33 z=2 None .text __ct__7cSAngleFRC7cSAngle */ cSAngle::cSAngle(const cSAngle& angle) { this->Val(angle); @@ -212,9 +150,26 @@ cDegree::cDegree(float f) { this->Val(f); } +struct cAngle { + template + static T Adjust(T f1, T f2, T f3); +}; + +template +T cAngle::Adjust(T f1, T f2, T f3) { + while (f1 >= f3) { + f1 -= f3 - f2; + } + while (f1 < f2) { + f1 += f3 - f2; + } + return f1; +} + /* 8027137C-802713BC 0040+00 s=1 e=0 z=0 None .text Formal__7cDegreeFv */ cDegree& cDegree::Formal(void) { - mDegree = cAngle_NS_Adjust(mDegree, -180.0f, 180.0f); + mDegree = cAngle::Adjust(mDegree, -180.0f, 180.0f); + // mDegree = cAngle_NS_Adjust(mDegree, -180.0f, 180.0f); return *this; } @@ -335,7 +290,8 @@ cSGlobe& cSGlobe::Formal(void) { mInclination.Val(mInclination.Inv()); } if (mAzimuth.Val() < -0x4000 || 0x4000 < mAzimuth.Val()) { - mAzimuth.mirrorAtMaxNeg(); + // mAzimuth.mirrorAtMaxNeg(); + mAzimuth = cSAngle((s16)-0x8000) - mAzimuth; mInclination.Val(mInclination.Inv()); } return *this; @@ -395,77 +351,3 @@ cSGlobe& cSGlobe::Invert(void) { mRadius = -mRadius; return this->Formal(); } - -/* 80271BA8-80271BD4 002C+00 s=1 e=0 z=0 None .text Adjust__6cAngleFfff */ -// cAngle::Adjust(f32, f32, f32) -float cAngle_NS_Adjust(float f1, float f2, float f3) { - while (f1 >= f3) { - f1 -= f3 - f2; - } - while (f1 < f2) { - f1 += f3 - f2; - } - return f1; -} - -/* ############################################################################################## */ -/* 80430F98-80430FA4 05DCB8 000C+00 1/1 0/0 0/0 .bss @2401 */ -static u8 lit_2401[12]; - -/* 80430FA4-80430FB0 05DCC4 000C+00 0/1 0/0 0/0 .bss @2402 */ -#pragma push -#pragma force_active on -static u8 lit_2402[12]; -#pragma pop - -/* 80430FB0-80430FBC 05DCD0 000C+00 0/1 0/0 0/0 .bss @2403 */ -#pragma push -#pragma force_active on -static u8 lit_2403[12]; -#pragma pop - -/* 80430FBC-80430FC8 05DCDC 000C+00 0/1 0/0 0/0 .bss @2404 */ -#pragma push -#pragma force_active on -static u8 lit_2404[12]; -#pragma pop - -/* 80430FC8-80430FD8 05DCE8 000C+04 0/1 0/0 0/0 .bss @2405 */ -#pragma push -#pragma force_active on -static u8 lit_2405[12 + 4 /* padding */]; -#pragma pop - -/* 80451188-8045118C 000688 0002+02 1/1 22/22 0/0 .sbss _0__7cSAngle */ -extern u8 _0__7cSAngle[2 + 2 /* padding */]; -u8 _0__7cSAngle[2 + 2 /* padding */]; - -/* 8045118C-80451190 00068C 0002+02 1/1 0/0 0/0 .sbss _1__7cSAngle */ -static u8 _1__7cSAngle[2 + 2 /* padding */]; - -/* 80451190-80451194 000690 0002+02 1/1 6/6 0/0 .sbss _90__7cSAngle */ -extern u8 _90__7cSAngle[2 + 2 /* padding */]; -u8 _90__7cSAngle[2 + 2 /* padding */]; - -/* 80451194-80451198 000694 0002+02 1/1 2/2 0/0 .sbss _180__7cSAngle */ -extern u8 _180__7cSAngle[2 + 2 /* padding */]; -u8 _180__7cSAngle[2 + 2 /* padding */]; - -/* 80451198-804511A0 000698 0002+06 1/1 3/3 0/0 .sbss _270__7cSAngle */ -extern u8 _270__7cSAngle[2 + 6 /* padding */]; -u8 _270__7cSAngle[2 + 6 /* padding */]; - -/* 80271BD4-80271C8C 26C514 00B8+00 0/0 1/0 0/0 .text __sinit_c_angle_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_c_angle_cpp() { - nofralloc -#include "asm/SSystem/SComponent/c_angle/__sinit_c_angle_cpp.s" -} -#pragma pop - -#pragma push -#pragma force_active on -SECTION_CTORS void* const _ctors_80271BD4 = (void*)__sinit_c_angle_cpp; -#pragma pop diff --git a/libs/SSystem/SComponent/c_sxyz.cpp b/libs/SSystem/SComponent/c_sxyz.cpp index 915f68a272a..a11a8a05e9b 100644 --- a/libs/SSystem/SComponent/c_sxyz.cpp +++ b/libs/SSystem/SComponent/c_sxyz.cpp @@ -7,18 +7,12 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// External References: -// - -extern "C" void __ct__5csXyzFsss(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __register_global_object(); - // // Declarations: // +const csXyz csXyz::Zero = csXyz(0,0,0); + /* 802673F4-80267404 0010+00 s=4 e=19 z=119 None .text __ct__5csXyzFsss */ csXyz::csXyz(s16 param_0, s16 param_1, s16 param_2) { mX = param_0; @@ -47,35 +41,3 @@ csXyz csXyz::operator-(csXyz& param_0) { csXyz csXyz::operator*(f32 param_0) { return csXyz(mX* param_0, mY * param_0, mZ * param_0); } - -#ifdef NON_MATCHING -csXyz Zero__5csXyz = csXyz(0,0,0); -#else - -/* ############################################################################################## */ -/* 80430DA8-80430DB8 05DAC8 000C+04 1/1 0/0 0/0 .bss @262 */ -static u8 lit_262[12 + 4 /* padding */]; - -/* 80451160-80451164 000660 0004+00 1/1 13/13 3/3 .sbss Zero__5csXyz */ -extern u8 Zero__5csXyz[4]; -u8 Zero__5csXyz[4]; - -/* 80451164-80451168 000664 0004+00 1/1 6/13 0/2 .sbss None */ -extern u8 data_80451164[4]; -u8 data_80451164[4]; - -/* 8026758C-802675E4 261ECC 0058+00 0/0 1/0 0/0 .text __sinit_c_sxyz_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_c_sxyz_cpp() { - nofralloc -#include "asm/SSystem/SComponent/c_sxyz/__sinit_c_sxyz_cpp.s" -} -#pragma pop - -#pragma push -#pragma force_active on -SECTION_CTORS void* const _ctors_8026758C = (void*)__sinit_c_sxyz_cpp; -#pragma pop -#endif