From 9d2e8e121bbc46fad80b86b062eb956ffbd415a0 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 12 Oct 2023 00:09:33 -0700 Subject: [PATCH] f_op_actor_mng matches --- include/d/actor/d_a_player.h | 2 +- include/d/actor/d_a_player_link.h | 2 +- include/f_op/f_op_actor_mng.h | 2 +- src/f_op/f_op_actor_mng.cpp | 50 ++++++++++++++++++++++++++----- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 1b7fe770a..3b13f16da 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -177,7 +177,7 @@ public: virtual void getBaseAnimeFrame() = 0; virtual void getItemID() const; virtual void getThrowBoomerangID() const; - virtual void getGrabActorID() const; + virtual u32 getGrabActorID() const; virtual void checkGrabBarrel(); virtual void checkPlayerNoDraw(); virtual void checkRopeTag(); diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index eeadc80c3..96c533d7e 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -1020,7 +1020,7 @@ public: virtual void getBaseAnimeFrame(); virtual void getItemID() const; virtual void getThrowBoomerangID() const; - virtual void getGrabActorID() const; + virtual u32 getGrabActorID() const; virtual void checkGrabBarrel(); virtual void checkPlayerNoDraw(); virtual void checkRopeTag(); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index bfc9ebe53..384aeed5e 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -292,7 +292,7 @@ inline BOOL fopAcM_isSwitch(fopAc_ac_c* pActor, int sw) { return dComIfGs_isSwitch(sw, fopAcM_GetHomeRoomNo(pActor)); } -inline fopAc_ac_c* fopAcM_SearchByID(unsigned int id) { +inline fopAc_ac_c* fopAcM_SearchByID(u32 id) { return (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeByID, &id); } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 3455cc0b0..f9a267229 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -13,6 +13,7 @@ #include "d/d_item.h" #include "d/d_item_data.h" #include "d/actor/d_a_player.h" +#include "d/actor/d_a_player_link.h" #include "d/actor/d_a_item.h" #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_lib.h" @@ -959,13 +960,28 @@ void fopAcM_createWarpFlower(cXyz*, csXyz*, int, unsigned char) { } /* 80027920-80027970 .text enemySearchJugge__FPvPv */ -void enemySearchJugge(void*, void*) { - /* Nonmatching */ +fopAc_ac_c * enemySearchJugge(void* ptr, void*) { + if (ptr != NULL && fopAc_IsActor(ptr)) { + fopAc_ac_c * i_ac = (fopAc_ac_c *)ptr; + if (i_ac->mGroup == fopAc_ENEMY_e) + return i_ac; + } + return NULL; } /* 80027970-80027A9C .text fopAcM_myRoomSearchEnemy__FSc */ -fopAc_ac_c* fopAcM_myRoomSearchEnemy(signed char) { - /* Nonmatching */ +fopAc_ac_c* fopAcM_myRoomSearchEnemy(s8 roomNo) { + JUT_ASSERT(0xe07, roomNo >= 0); + + scene_class* roomProc = fopScnM_SearchByID(dStage_roomControl_c::getStatusProcID(roomNo)); + JUT_ASSERT(0xe0a, roomProc != 0); + + u32 grabProcID = daPy_getPlayerActorClass()->getGrabActorID(); + fopAc_ac_c* enemy = fopAcM_SearchByID(grabProcID); + if (enemy != NULL && fopAcM_GetGroup(enemy) == fopAc_ENEMY_e) + return enemy; + + return (fopAc_ac_c*) fpcM_JudgeInLayer(fpcM_LayerID(roomProc), (fpcCtIt_JudgeFunc)enemySearchJugge, NULL); } /* 80027A9C-80027B24 .text fopAcM_createDisappear__FP10fopAc_ac_cP4cXyzUcUcUc */ @@ -1018,14 +1034,34 @@ const char * fopAcM_getProcNameString(fopAc_ac_c* i_this) { return "UNKOWN"; } +struct findObjectCBParam { + const char * mpProcName; + u32 mParamMask; + u32 mParameter; +}; + /* 8002833C-80028410 .text fopAcM_findObjectCB__FP10fopAc_ac_cPv */ -fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c*, void*) { - /* Nonmatching */ +fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c* it, void* i_prm) { + findObjectCBParam* Prm = (findObjectCBParam*)i_prm; + JUT_ASSERT(4095, Prm); + + dStage_objectNameInf *inf = dStage_searchName(Prm->mpProcName); + if (inf == NULL) + return NULL; + + if (inf->mProcName == fopAcM_GetProfName(it) && inf->mSubtype == it->mSubtype && (Prm->mParamMask == 0 || Prm->mParameter == (fopAcM_GetParam(it) & Prm->mParamMask))) + return it; + + return NULL; } /* 80028410-80028448 .text fopAcM_searchFromName__FPcUlUl */ fopAc_ac_c* fopAcM_searchFromName(char* pProcName, u32 paramMask, u32 parameter) { - /* Nonmatching */ + findObjectCBParam param; + param.mpProcName = pProcName; + param.mParamMask = paramMask; + param.mParameter = parameter; + return (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fopAcM_findObjectCB, ¶m); } /* 80028448-80028560 .text fopAcM_getWaterY__FPC4cXyzPf */