summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlepelog <lepelog@users.noreply.github.com>2021-03-03 18:17:19 +0100
committerGitHub <noreply@github.com>2021-03-03 12:17:19 -0500
commit3b69d4cba0b957e33d141f23f4a66802e2bbf476 (patch)
treeda33a38c120eb534d0893b2f799352ed2f1855d1 /src
parent368135b3da5b67087f63dd6b748f1db172c3d112 (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.cpp4
-rw-r--r--src/f/f_op/f_op_actor_mng.cpp37
-rw-r--r--src/f/f_op/f_op_overlap_mng.cpp10
-rw-r--r--src/f/f_op/f_op_overlap_req.cpp33
-rw-r--r--src/f/f_op/f_op_scene_iter.cpp22
-rw-r--r--src/f/f_op/f_op_scene_mng.cpp33
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;
}