diff options
| author | lepelog <lepelog@users.noreply.github.com> | 2021-03-03 18:17:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-03 12:17:19 -0500 |
| commit | 3b69d4cba0b957e33d141f23f4a66802e2bbf476 (patch) | |
| tree | da33a38c120eb534d0893b2f799352ed2f1855d1 /src | |
| parent | 368135b3da5b67087f63dd6b748f1db172c3d112 (diff) | |
Match a few nonmatchings and delete unused asm (#117)
* match a few nonmatchings, delete unused asm
* fix missing returns in f_op_actor_iter
* remove obsolete comments
Diffstat (limited to 'src')
| -rw-r--r-- | src/f/f_op/f_op_actor_iter.cpp | 4 | ||||
| -rw-r--r-- | src/f/f_op/f_op_actor_mng.cpp | 37 | ||||
| -rw-r--r-- | src/f/f_op/f_op_overlap_mng.cpp | 10 | ||||
| -rw-r--r-- | src/f/f_op/f_op_overlap_req.cpp | 33 | ||||
| -rw-r--r-- | src/f/f_op/f_op_scene_iter.cpp | 22 | ||||
| -rw-r--r-- | src/f/f_op/f_op_scene_mng.cpp | 33 |
6 files changed, 67 insertions, 72 deletions
diff --git a/src/f/f_op/f_op_actor_iter.cpp b/src/f/f_op/f_op_actor_iter.cpp index c9d510dcc4..35508ba4b0 100644 --- a/src/f/f_op/f_op_actor_iter.cpp +++ b/src/f/f_op/f_op_actor_iter.cpp @@ -13,7 +13,7 @@ int fopAcIt_Executor(fopAcIt_ExecutorFunc pExecFunc, void* pData) { } userData; userData.func = pExecFunc; userData.data = pData; - cLsIt_Method(&lbl_803A35E0, (cNdIt_MethodFunc)cTgIt_MethodCall, &userData); + return cLsIt_Method(&lbl_803A35E0, (cNdIt_MethodFunc)cTgIt_MethodCall, &userData); } // fopAcIt_Judge__FPFPvPv_PvPv @@ -24,5 +24,5 @@ void* fopAcIt_Judge(fopAcIt_JudgeFunc pJudgeFunc, void* pData) { } userData; userData.func = pJudgeFunc; userData.data = pData; - cLsIt_Judge(&lbl_803A35E0, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &userData); + return cLsIt_Judge(&lbl_803A35E0, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &userData); } diff --git a/src/f/f_op/f_op_actor_mng.cpp b/src/f/f_op/f_op_actor_mng.cpp index f41872a3e4..a8a3615481 100644 --- a/src/f/f_op/f_op_actor_mng.cpp +++ b/src/f/f_op/f_op_actor_mng.cpp @@ -296,9 +296,26 @@ extern u8 lbl_80451C58; extern u8 lbl_80451C5C; extern u8 lbl_80451C60; extern j3dsys lbl_80434AC8; -extern u8 lbl_80450AE0; +extern f32 lbl_80450AE0[4]; // array is fake, to force 2 step load extern u8 lbl_803DD470; +// this belongs to msl_c/math.h, but can't go there currently because of data +inline f32 sqrtf(f32 mag) { + if (mag > FLOAT_LABEL(lbl_80451C04)) { + f64 tmpd = __frsqrte(mag); + tmpd = DOUBLE_LABEL(lbl_80451C08) * tmpd * (DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag); + tmpd = DOUBLE_LABEL(lbl_80451C08) * tmpd * (DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag); + return DOUBLE_LABEL(lbl_80451C08) * tmpd * + (DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag) * mag; + } else if (mag < DOUBLE_LABEL(lbl_80451C18)) { + return /* __float_nan */ lbl_80450AE0[0]; + } else if (fpclassify(mag) == 1) { + return /* __float_nan */ lbl_80450AE0[0]; + } else { + return mag; + } +} + inline u32 fopAcM_GetID(const void* pProc) { return fpcM_GetID(pProc); } @@ -777,8 +794,9 @@ s32 fopAcM_seenActorAngleY(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) } // fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c -asm f32 fopAcM_searchActorDistance(const fopAc_ac_c*, const fopAc_ac_c*){nofralloc -#include "f/f_op/f_op_actor_mng/asm/func_8001A7E0.s" +f32 fopAcM_searchActorDistance(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) { + cXyz tmp = (pActorB->mPosition - pActorA->mPosition); + return sqrtf(tmp.abs2()); } // fopAcM_searchActorDistance2__FPC10fopAc_ac_cPC10fopAc_ac_c @@ -787,18 +805,19 @@ f32 fopAcM_searchActorDistance2(const fopAc_ac_c* pActorA, const fopAc_ac_c* pAc return tmp.abs2(); } -// fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c -asm f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c*, const fopAc_ac_c*) { - nofralloc -#include "f/f_op/f_op_actor_mng/asm/func_8001A964.s" -} - // TODO: replace calls to this with .abs2XZ, needs additional float constant at the moment inline f32 cXyzAbs2XZ(const cXyz& ths) { cXyz tmp(ths.x, /* 0.0f */ lbl_80451C04, ths.z); return tmp.abs2(); } +// fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c +f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) { + const cXyz& posA = fopAcM_GetPosition_p(pActorA); + const cXyz& posB = fopAcM_GetPosition_p(pActorB); + return sqrtf(cXyzAbs2XZ(posB - posA)); +} + // fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c f32 fopAcM_searchActorDistanceXZ2(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) { const cXyz& posA = fopAcM_GetPosition_p(pActorA); diff --git a/src/f/f_op/f_op_overlap_mng.cpp b/src/f/f_op/f_op_overlap_mng.cpp index 4152e7b860..dd9a4f99e6 100644 --- a/src/f/f_op/f_op_overlap_mng.cpp +++ b/src/f/f_op/f_op_overlap_mng.cpp @@ -43,17 +43,9 @@ int fopOvlpM_SceneIsStart(void) { } } -// 1 instruction off -#ifdef NONMATCHING int fopOvlpM_IsOutReq(overlap_task_class* pTaskClass) { - return pTaskClass->field_0xc4 == 2; + return (pTaskClass->field_0xc4 & 0x3F) == 2; } -#else -asm int fopOvlpM_IsOutReq(overlap_task_class* pTaskClass) { - nofralloc -#include "f/f_op_overlap_mng/asm/func_8001E504.s" -} -#endif void fopOvlpM_Done(overlap_task_class* pTaskClass) { cReq_Done((request_base_class*)&pTaskClass->field_0xc4); diff --git a/src/f/f_op/f_op_overlap_req.cpp b/src/f/f_op/f_op_overlap_req.cpp index 585ddd1fda..eef979750e 100644 --- a/src/f/f_op/f_op_overlap_req.cpp +++ b/src/f/f_op/f_op_overlap_req.cpp @@ -50,19 +50,10 @@ int fopOvlpReq_phase_Done(overlap_request_class* pOvlpReq) { return 0; } -// return line is wrong -#ifdef NONMATCHING -s16 fopOvlpReq_phase_IsDone(overlap_request_class* param_1) { +s32 fopOvlpReq_phase_IsDone(overlap_request_class* param_1) { cReq_Done((request_base_class*)param_1); - param_1->field_0x2--; - return ((int)param_1->field_0x2 | ~-(int)param_1->field_0x2) >> 0x1F & 2; + return param_1->field_0x2-- <= 0 ? 2 : 0; } -#else -asm void fopOvlpReq_phase_IsDone(overlap_request_class*) { - nofralloc -#include "f/f_op/f_op_overlap_req/asm/func_8001E748.s" -} -#endif int fopOvlpReq_phase_IsWaitOfFadeout(overlap_request_class* pOvlpReq) { if (cReq_Is_Done((request_base_class*)(pOvlpReq->field_0x20 + 0xC4))) { @@ -131,9 +122,23 @@ request_base_class* fopOvlpReq_Request(overlap_request_class* pOvlpReq, s16 para return (request_base_class*)pOvlpReq; } -asm int fopOvlpReq_Handler(overlap_request_class*) { - nofralloc -#include "f/f_op/f_op_overlap_req/asm/func_8001E9F0.s" +int fopOvlpReq_Handler(overlap_request_class* pOvlpReq) { + int phsDo = cPhs_Do(&pOvlpReq->field_0x18, pOvlpReq); + switch (phsDo) { + case 2: + return fopOvlpReq_Handler(pOvlpReq); + case 0: + return 0; + case 1: + return 0; + case 4: + return 4; + case 3: + case 5: + return 5; + default: + return 5; + } } int fopOvlpReq_Cancel(overlap_request_class* pOvlpReq) { diff --git a/src/f/f_op/f_op_scene_iter.cpp b/src/f/f_op/f_op_scene_iter.cpp index 5c41c7c27b..92bd0692a4 100644 --- a/src/f/f_op/f_op_scene_iter.cpp +++ b/src/f/f_op/f_op_scene_iter.cpp @@ -1,21 +1,21 @@ /* f_op_scene_iter.cpp autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795954 */ #include "f/f_op/f_op_scene_iter.h" +#include "SComponent/c_list.h" +#include "SComponent/c_list_iter.h" #include "SComponent/c_tag_iter.h" #include "global.h" // additional symbols needed for f_op_scene_iter.cpp -// autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795974 -extern "C" { -void cLsIt_Judge(void); -void fopScnIt_Judge(void); -} - -// additional symbols needed for f_op_scene_iter.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795978 -extern u8 lbl_803A3918; +extern node_list_class lbl_803A3918; // f_op_scene_tag::g_fopScnTg_SceneList -asm void* fopScnIt_Judge(fop_ScnItFunc pFunc1, void* pFunc2) { - nofralloc -#include "f/f_op/f_op_scene_iter/asm/func_8001EC74.s" +void* fopScnIt_Judge(fop_ScnItFunc pFunc1, void* pData) { + struct { + fop_ScnItFunc mFunc; + void* mpData; + } iterParams; + iterParams.mFunc = pFunc1; + iterParams.mpData = pData; + return cLsIt_Judge(&lbl_803A3918, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &iterParams); } diff --git a/src/f/f_op/f_op_scene_mng.cpp b/src/f/f_op/f_op_scene_mng.cpp index e3ca5a64db..5513d56e82 100644 --- a/src/f/f_op/f_op_scene_mng.cpp +++ b/src/f/f_op/f_op_scene_mng.cpp @@ -14,53 +14,32 @@ void fopScnRq_Request__FiP11scene_classsPvsUs(void); // autogenerated by split.py v0.4 at 2021-02-13 20:33:37.409412 extern unsigned int l_scnRqID; -// matches but can be improved void* fopScnM_SearchByID(unsigned int id) { - unsigned int local_8[2]; - local_8[0] = id; - return fopScnIt_Judge((fop_ScnItFunc)fpcSch_JudgeByID, (void*)local_8); + return fopScnIt_Judge((fop_ScnItFunc)fpcSch_JudgeByID, &id); } int fopScnM_ChangeReq(scene_class* pScene, s16 param_2, s16 param_3, u16 param_4) { u32 sceneRequestID = fopScnRq_Request(2, pScene, param_2, 0, param_3, param_4); - // can't get a match unless the request id is unsigned - if (sceneRequestID == -1) { + if (sceneRequestID == 0xFFFFFFFF) { return 0; } l_scnRqID = sceneRequestID; return 1; } -#ifdef NONMATCHING unsigned int fopScnM_DeleteReq(scene_class* pScene) { u32 sceneRequestID = fopScnRq_Request(1, pScene, 0x7fff, 0, 0x7fff, 0); - u32 tmp = (-sceneRequestID - 1); - u32 tmp2 = (tmp + -1); - return tmp2; + return sceneRequestID != 0xFFFFFFFF; } -#else -asm unsigned int fopScnM_DeleteReq(scene_class*) { - nofralloc -#include "f/f_op_scene_mng/asm/func_8001ED3C.s" -} -#endif -#ifdef NONMATCHING -void fopScnM_CreateReq(s16 param_1, s16 param_2, u16 param_3, u32 param_4) { +int fopScnM_CreateReq(s16 param_1, s16 param_2, u16 param_3, u32 param_4) { u32 sceneRequestID = fopScnRq_Request(0, 0, param_1, (void*)param_4, param_2, param_3); - u32 tmp = (-sceneRequestID + -1); - return tmp - (sceneRequestID == 0) + (-sceneRequestID + -2) & 0xFF; -} -#else -asm void fopScnM_CreateReq(s16, s16, u16, u32) { - nofralloc -#include "f/f_op_scene_mng/asm/func_8001ED84.s" + return sceneRequestID != 0xFFFFFFFF; } -#endif u32 fopScnM_ReRequest(s16 param_1, u32 param_2) { - if (l_scnRqID == -1) { + if (l_scnRqID == 0xFFFFFFFF) { return 0; } |
